¿Cómo puedo usar io.StringIO () con el módulo csv?

Intenté realizar una copia de seguridad de un programa Python 3 a 2.7, y tengo un problema extraño:

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

Según los documentos,io.StringIO() devuelve una secuencia en memoria para texto Unicode. Funciona correctamente cuando intento alimentarlo manualmente una cadena Unicode. ¿Por qué falla junto con lacsv módulo, incluso si todas las cadenas que se escriben son cadenas Unicode? Donde hace elstr provienen de que causa la excepción?

(Sé que puedo usarStringIO.StringIO() en cambio, pero me pregunto qué está mal conio.StringIO() en este escenario)

Respuestas a la pregunta(4)

Su respuesta a la pregunta