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

时间:2019-04-04 05:22:59

标签: python twitter utf-8 typeerror

当我尝试将单词列表写入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文件中,但没有打印任何编码错误?

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

对我来说,“工作代码”代码段看起来不错,无需更改任何内容(尽管使用str语句打开文件会很不错)。 它不会产生任何UnicodeError,因为在极少数情况下,对UTF-8的编码会失败。 如果有错误,将由您的with子句处理。

可能没有必要完全理解第一个代码片段失败的原因。 抛开“错误代码”,尝试查找涵盖Python 3的最新Python书籍。 Python 2即将停产,如果您是一名新的Python学习者,则不必为它烦恼。

答案 1 :(得分:-1)

错误代码,代码word.encode()的结果是一个类似于object的字节,因此,您无法连接str和字节。 工作代码: 单词和“ \ n”在输入txt文件之前已经被编码。