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
在任何時候都不會吞下一個異常,並且默默地跳過該塊。