TypeError:无法将str连接到字节。列出到txt文件

问题描述 投票:0回答:2

当我尝试将单词列表写入txt文件时,我得到TypeError: can't concat str to bytes

下面是书上的内容,它返回TypeError然后我尝试了不同的方式,它的工作原理。

# Error Code
f = open('words.txt', 'w')
for word in stemmed:
    try:
        f.write(word.encode('utf-8') + '\n')
    except UnicodeEncodeError, e:
        print 'Enconding error ' + word + '\n'
f.close()

# Working Code
f= open('word.txt','w',encoding= 'utf-8')
for word in stemmed:
    try:
        f.write(word+'\n')
    except UnicodeEncodeError as e:
        print('Encoding Error' + word + '\n')
f.close()

两个代码有什么区别?似乎# Working Code确实将单词列表保存到txt文件中,但是不打印任何编码错误?

谢谢

python twitter utf-8 typeerror
2个回答
0
投票

似乎第一个片段(书中的那个)是为Python 2编写的。在Python 2中,字节字符串(类型为str)和Unicode字符串(类型为unicode)可以混合使用 - 它有时会起作用,有时会引发UnicodeError,有时它会产生垃圾文本(“mojibake”)。

但是,您显然正在运行Python 3(这很好!),其中两种字符串类型不兼容:您不能混合使用字节字符串(类型为bytes)和Unicode字符串(类型为str)。

“工作代码”片段看起来很好,不需要改变任何东西(尽管使用with语句打开文件会很好)。它不会产生任何UnicodeError,因为极少数情况下编码为UTF-8失败。如果有错误,它将由您的except条款处理。

可能没有必要完全理解为什么第一个代码段失败了。只是抛弃“错误代码”并尝试找到一本更新的Python书籍,其中包含Python 3. Python 2将很快停止使用,如果你是一名新的Python学习者,你不必为此烦恼。


-1
投票

错误代码,代码word.encode()的结果是像对象一样的字节,所以,你不能连接str和bytes。工作代码:单词和'\ n'在被放入txt文件之前已被编码。

© www.soinside.com 2019 - 2024. All rights reserved.