我上课
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__()
,则失败。
正确的,pythonic处理方式是什么?
我不想使用一些is_allocated_correctly
像这样
with Resource() as r:
if r.is_allocated_correctly():
r.do_stuff()
因为它打破了with语句的重点。
请给我一些想法,在这里做什么。
答案 0 :(得分:2)
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()