gpt4 book ai didi

python - 为什么 python IDLE 和 Console 产生不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:34 24 4
gpt4 key购买 nike

我写了一个简单的 Python 脚本来将中文标点符号翻译成英文。

import codecs, sys

def trcn():
tr = lambda x: x.translate(str.maketrans(""",。!?;:、()【】『』「」﹁﹂“”‘’《》~¥…—×""", """,.!?;:,()[][][][]""''<>~$^-*"""))
out = codecs.getwriter('utf-8')(sys.stdout)
for line in sys.stdin:
out.write(tr(line))

if __name__ == '__main__':
if not len(sys.argv) == 1:
print("usage:\n\t{0} STDIN STDOUT".format(sys.argv[0]))
sys.exit(-1)
trcn()
sys.exit(0)

但是 UNICODE 有问题。我不能让它通过。错误信息:

Traceback (most recent call last):
File "trcn.py", line 13, in <module>
trcn()
File "trcn.py", line 7, in trcn
out.write(tr(line))
File "C:\Python31\Lib\codecs.py", line 356, in write
self.stream.write(data)
TypeError: must be str, not bytes

之后,我在 IDLE 和 Console 中测试 out.write()。他们产生了不同的结果。我不知道为什么。

处于空闲状态

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import sys,codecs
>>> out = codecs.getwriter('utf-8')(sys.stdout)
>>> out.write('hello')
hello
>>>

在控制台中

Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys,codecs
>>> out = codecs.getwriter('utf-8')(sys.stdout)
>>> out.write('hello')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python31\Lib\codecs.py", line 356, in write
self.stream.write(data)
TypeError: must be str, not bytes
>>>

平台:Windows XP EN

最佳答案

您的编码输出以字节形式从编码器输出,因此必须传递给 sys.stdout.buffer:

out = codecs.getwriter('utf-8')(sys.stdout.buffer)

我不完全确定为什么您的代码在 IDLE 和控制台中的行为不同,但以上内容可能会有所帮助。也许 IDLE 的 sys.stdout 实际上需要字节而不是字符(希望它有一个 .buffer 也需要字节)。

关于python - 为什么 python IDLE 和 Console 产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4568203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com