Ответ 1
Модуль StringIO предшествует оператору with
. Так как StringIO был удален в Python 3, вы можете просто использовать его замену, io.BytesIO
:
>>> import io
>>> with io.BytesIO(b"foo") as f: f.read()
b'foo'
Мне нужно заглушить tempfile
, а StringIO
кажется идеальным. Только то, что все это терпит неудачу:
In [1]: from StringIO import StringIO
In [2]: with StringIO("foo") as f: f.read()
--> AttributeError: StringIO instance has no attribute '__exit__'
Какой обычный способ предоставить консервированную информацию вместо чтения файлов с недетерминированным контентом?
Модуль StringIO предшествует оператору with
. Так как StringIO был удален в Python 3, вы можете просто использовать его замену, io.BytesIO
:
>>> import io
>>> with io.BytesIO(b"foo") as f: f.read()
b'foo'
этот monkeypatch работает для меня в python2. вызовите monkeypatch
в вашей процедуре инициализации.
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()
тестовый прогон:
[email protected]:~/stackoverflow/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)
[email protected]:~/stackoverflow/12028637$