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$