Jak mogę korzystać z io.StringIO () z modułem csv?

Próbowałem przenieść program Python 3 do wersji 2.7 i utknąłem z dziwnym problemem:

>>> 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'

Zgodnie z dokumentami,io.StringIO() zwraca strumień w pamięci dla tekstu Unicode. Działa poprawnie, gdy próbuję ręcznie podać ciąg Unicode. Dlaczego zawodzi w połączeniu zcsv moduł, nawet jeśli wszystkie zapisywane ciągi są ciągami Unicode? Gdzie jeststr pochodzą z tego powodu Wyjątek?

(Wiem, że mogę użyćStringIO.StringIO() zamiast tego, ale zastanawiam się, co jest nie takio.StringIO() w tym scenariuszu)

questionAnswers(4)

yourAnswerToTheQuestion