textiowrapper python3 py3 instalar fileio python unit-testing stringio stubs

python3 - StringIO de Python no hace bien con las declaraciones `with`



stringio stringio() python3 (2)

El módulo StringIO es anterior a la instrucción with . Ya que StringIO ha sido eliminado en Python 3 de todos modos, puedes usar su reemplazo, io.BytesIO :

>>> import io >>> with io.BytesIO(b"foo") as f: f.read() b''foo''

Necesito tempfile y StringIO parecía perfecto. Solo que todo esto falla en una omisión:

In [1]: from StringIO import StringIO In [2]: with StringIO("foo") as f: f.read() --> AttributeError: StringIO instance has no attribute ''__exit__''

¿Cuál es la forma habitual de proporcionar información enlatada en lugar de leer archivos con contenido no determinista?


este monkeypatch funciona para mí en python2. Llama a monkeypatch en tu rutina de inicialización.

import logging from StringIO import StringIO logging.basicConfig(level=logging.DEBUG if __debug__ else logging.INFO) def debug(*args): logging.debug(''args: %s'', args) return args[0] def monkeypatch(): '''''' allow StringIO to use `with` statement '''''' StringIO.__exit__ = debug StringIO.__enter__ = debug if __name__ == ''__main__'': monkeypatch() with StringIO("this is a test") as infile: print infile.read()

prueba de funcionamiento:

jcomeau@aspire:~//12028637$ python test.py DEBUG:root:args: (<StringIO.StringIO instance at 0xf73e76ec>,) this is a test DEBUG:root:args: (<StringIO.StringIO instance at 0xf73e76ec>, None, None, None) jcomeau@aspire:~//12028637$