Python2.7:print不跟io模块讲unicode?

2024-09-28 05:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

import sys, codecs, io

codecsout = codecs.getwriter('utf8')(sys.stdout)
ioout = io.open(sys.stdout.fileno(), mode='w', encoding='utf8')
print >> sys.stdout, 1
print >> codecsout, 2
print >> ioout, 3

失败原因:

^{pr2}$

它也会因来自__future__print(3, file=ioout)而失败。在

print不知道如何与io模块对话吗?在


Tags: ioimportmodestdoutsys原因openutf8
2条回答

print语句在它打印的每个东西上隐式调用__str__sys.stdout是一个字节流,所以发送一个str就可以了。codecs.getwriter是一个旧的Python API,所以我猜它只是像python2.x那样隐式地将str转换成{}。但是,新的io模块在将str转换为{}方面非常严格,这就是它抱怨的原因。在

因此,如果要将unicode数据发送到流,请使用.write()方法而不是print

>>> sys.stdout.write(u'1\n')
1
>>> codecsout.write(u'1\n')
1
>>> sys.stdout.write(u'1\n')
1

显然不是这样,即使你给它一个显式的Unicode字符串,它也不起作用。在

>>> print >> ioout, u'3'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be unicode, not str

我猜问题出在自动附加到末尾的新行中。未来的打印功能似乎没有同样的问题:

^{pr2}$

相关问题 更多 >

    热门问题