返回 StringIO 对象
Returning StringIO object
我有以下 python 代码:
def parse_object(object):
data = object.read()
do_other_stuff(data)
def get_object():
content = "abc"
try:
object = StringIO()
object.write(content)
return object
finally:
object.close()
def main():
object = get_object()
parse_object(object)
parse_object 获取文件对象或 StringIO 实例,但显然 StringIO 对象在 get_object 结束后立即关闭。
有没有办法在 get_object 内使用对象后将其关闭?
parse_object 无法更改,因为它在我不想更改的内置库中,get_object 在我的代码中
在Python自动关闭是上下文管理器的典型工作。请参阅 https://docs.python.org/2.7/library/contextlib.html#contextlib.closing
处的参考资料
from contextlib import contextmanager
def parse_object(object):
data = object.read()
do_other_stuff(data)
@contextmanager
def get_object():
content = "abc"
try:
object = StringIO()
object.write(content)
yield object
finally:
object.close()
def main():
with get_object() as object:
parse_object(object)
我有以下 python 代码:
def parse_object(object):
data = object.read()
do_other_stuff(data)
def get_object():
content = "abc"
try:
object = StringIO()
object.write(content)
return object
finally:
object.close()
def main():
object = get_object()
parse_object(object)
parse_object 获取文件对象或 StringIO 实例,但显然 StringIO 对象在 get_object 结束后立即关闭。
有没有办法在 get_object 内使用对象后将其关闭?
parse_object 无法更改,因为它在我不想更改的内置库中,get_object 在我的代码中
在Python自动关闭是上下文管理器的典型工作。请参阅 https://docs.python.org/2.7/library/contextlib.html#contextlib.closing
处的参考资料from contextlib import contextmanager
def parse_object(object):
data = object.read()
do_other_stuff(data)
@contextmanager
def get_object():
content = "abc"
try:
object = StringIO()
object.write(content)
yield object
finally:
object.close()
def main():
with get_object() as object:
parse_object(object)