Возврат объекта StringIO - PullRequest
       22

Возврат объекта StringIO

0 голосов
/ 21 декабря 2018

У меня есть следующий код 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 находится в моем коде

1 Ответ

0 голосов
/ 21 декабря 2018

В 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)
...