Python 3 プログラムを 2.7 にバックポートしようとしましたが、奇妙な問題が発生しました。
>>> import io
>>> import csv
>>> output = io.StringIO()
>>> output.write("Hello!") # Fail: io.StringIO expects Unicode
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unicode argument expected, got 'str'
>>> output.write(u"Hello!") # This works as expected.
6L
>>> writer = csv.writer(output) # Now let's try this with the csv module:
>>> csvdata = [u"Hello", u"Goodbye"] # Look ma, all Unicode! (?)
>>> writer.writerow(csvdata) # Sadly, no.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unicode argument expected, got 'str'
ドキュメントによると、io.StringIO()
Unicode テキストのメモリ内ストリームを返します。Unicode 文字列を手動で入力しようとすると、正しく動作します。csv
書き込まれているすべての文字列が Unicode 文字列であるにもかかわらず、モジュールと組み合わせて失敗するのはなぜですか? str
例外の原因はどこから来るのですか?
(代わりに使用できることは知っていますが、このシナリオでStringIO.StringIO()
何が問題なのか疑問に思っています)io.StringIO()