Fil*_*und 4 python with-statement contextmanager pycharm
PyCharm警告这段代码,说最后一次返回是无法访问的:
def foo():
with open(...):
return 1
return 0
Run Code Online (Sandbox Code Playgroud)
我希望如果open()失败,第二次返回将会执行.谁是对的?
Mar*_*ers 11
PyCharm是对的.如果open()失败,则引发异常,但都未 return达到.
with不会以某种方式保护您免受生成上下文管理器的表达式中的异常的影响.with预期后面的表达式将生成一个上下文管理器,此时它的__exit__方法被存储并__enter__调用它的方法.这里唯一的结果是成功生成并输入了上下文管理器,或者引发了异常.在with这个阶段,任何时候都不会吞下异常并默默跳过该区块.