3
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

次の場合に失敗します。

1
2
Traceback (most recent call last):
  File "print.py", line 7, in <module>
    print >> ioout, 3
TypeError: must be unicode, not str

print(3, file=ioout)からも失敗し__future__ます。

モジュールprintとの対話方法がわかりませんか?io

4

2 に答える 2

2

明らかにそうではありません。明示的なUnicode文字列を指定しても、機能しません。

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

問題は、最後に自動的に追加される改行にあると思います。将来の印刷機能には同じ問題はないようです。

>>> from __future__ import print_function
>>> print(unicode(3), file=ioout)
3
于 2013-01-07T23:25:52.133 に答える
0

このステートメントは、出力するそれぞれのものprintを暗黙的に呼び出します。はバイトストリームなので、送信しても問題ありません。は古い Python API であるため、Python 2.x が伝統的に行っているように暗黙的に変換されるだけだと思います。ただし、新しいモジュールは、Python 3.x のように変換することについて厳密であるため、文句を言います。__str__sys.stdoutstrcodecs.getwriterstrunicodeiostrunicode

したがって、Unicode データをストリームに送信する場合は、.write()代わりにメソッドを使用しprintます。

>>> sys.stdout.write(u'1\n')
1
>>> codecsout.write(u'1\n')
1
>>> sys.stdout.write(u'1\n')
1
于 2013-01-08T02:17:26.417 に答える