我试图调试一个模块,但每当我试图打印一些东西时,python 3.10就会停止,并显示以下错误:
File "/usr/lib/python3.10/codecs.py", line 378, in write
self.stream.write(data)
TypeError: write() argument must be str, not bytes
这个错误出现在我试图打印的任何地方,例如。print("abc")
或print(type(1))
。在调用breakpoint()
时也会发生这种情况,因为断点将其消息打印到stdout,但由于某种原因,stdout无法正常工作。
当在单独的python shell中调用print
时,它可以工作,但当从脚本中加载的模块调用它时,它就不行了。
你知道这种行为是怎么回事吗?
尝试实际打印print(type(var))
和print(isinstance(var,bytes))
的数据类型,但这导致相同的错误。
2条答案
按热度按时间hts6caw31#
s8vozzvw2#
这个问题通常发生在你尝试像在python 2.x中那样设置stdout的默认编码时:
虽然有other ways to achieve this in Python 3.x,但在打印不表示字符串的二进制数据时,这可能会导致意外的副作用。因此,不使用强制解码方法可能是最安全的,而是在实际需要时显式调用
decode
。