1

我有以下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 在我的代码中

4

1 回答 1

0

在 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)
于 2018-12-21T09:18:16.630 回答