Как проверить правильность размещения ресурсов в python ContextDecorator? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть класс

class Resource:
    __init__(self):
        self.resource = ...
    __enter__(self):
        #can fail, such as file open returning error, memory allocation fail, or any more complicated failure
    __exit__(self,*args):
        ...

Теперь я хочу

with Resource() as r:
    r.do_stuff()

Но если r не удалось __enter__() успешно, это не удалось.

Какой правильный, питонный способ справиться с этим?

Я не хотел использовать некоторые is_allocated_correctly

, например,

with Resource() as r:
    if r.is_allocated_correctly():
        r.do_stuff()

, поскольку это ломает точкуиз заявления с.

Пожалуйста, дайте мне некоторое представление, что делать здесь.

1 Ответ

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

Цель оператора with - правильно отменить выделение ресурсов или состояние сброса после завершения блока.

Если вы не можете войти в блок контекста без ошибки, это требует обработки внеоператор with.

Окружите все это try/except:

try:
    with Resource() as r:
        r.do_stuff()
except ResourceException as error:
    handle_error(error)

Или, если вы ничего не можете сделать с ошибкой, просто дайте ей пройти:

with Resource() as r:
    r.do_stuff()
...