当我尝试将单词列表写入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
文件中,但没有打印任何编码错误?
谢谢
答案 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文件之前已经被编码。