4
PyCharm警告有关此代码的,说最后的回报是无法访问:是否有`返回..返回`无法访问的代码?
def foo():
with open(...):
return 1
return 0
我预计,如果open()
失败第二回会执行。谁是对的?
PyCharm警告有关此代码的,说最后的回报是无法访问:是否有`返回..返回`无法访问的代码?
def foo():
with open(...):
return 1
return 0
我预计,如果open()
失败第二回会执行。谁是对的?
PyCharm是对的。如果open()
失败,则会引发例外,并且既不是return
。
with
不会以某种方式保护您免受生成上下文管理器的表达式中的异常。 with
之后的表达式预计会产生一个上下文管理器,此时将存储__exit__
方法并调用__enter__
方法。这里唯一的结果是上下文管理器被成功生成并输入,或者引发异常。在这个阶段,with
在任何时候都不会吞下一个异常,并且默默地跳过该块。