[英]python exception going to wrong except block
我曾在不同的指定特定的異常except
塊,但是當我提出exchangelib.errors.ErrorFolderNotFound
它去錯了except
塊(即它去TransportError except
塊。
我有這個代碼:
import exchangelib
try:
#some code
raise exchangelib.errors.ErrorFolderNotFound
except exchangelib.errors.TransportError:
print("transport error caught")
except exchangelib.errors.ErrorFolderNotFound:
print("folder not found caught")
except Exception as e:
print("exception caught")
但是當我移動ErrorFolderNotFound
如上所述以外的塊TransportError
塊它進入右塊(即ErrorFolderNotFound
除了塊)
import exchangelib
try:
#some code
raise exchangelib.errors.ErrorFolderNotFound
except exchangelib.errors.ErrorFolderNotFound:
print("folder not found caught")
except exchangelib.errors.TransportError:
print("transport error caught")
except Exception as e:
print("exception caught")
為什么會發生此行為,因為我在except
塊中給出了特定的例外? 。
另外,如果發生任何其他屬於同一exchangelib家族的異常,它將轉到except塊,該塊已經在except
塊中定義了一些特定的exchangelib錯誤,它應該轉到except的except塊
在下面的代碼中,當引發錯誤時,它將轉到TransportError
除了塊,但從邏輯上講,它應該轉到Exception除了block
import exchangelib
try:
#some code
raise exchangelib.errors.ErrorFolderNotFound
except exchangelib.errors.TransportError:
print("transport error caught")
except Exception as e:
print("exception caught")
在不知道exchangelib.errors
異常的層次結構的情況下,我只能猜測ErrorFolderNotFound
繼承自TransportError
。 也就是說,
class MyBaseError(BaseException):
pass
class TransportError(MyBaseError):
pass
class ErrorFolderNotFound(TransportError):
pass
try:
#some code
raise ErrorFolderNotFound
except TransportError:
print("transport error caught")
except ErrorFolderNotFound:
print("folder not found caught")
except Exception as e:
print("exception caught")
這將打印出transport error caught
如果我們更改層次結構,則ErrorFolderNotFound
不會從TransportError
繼承。 也就是說,
class MyBaseError(BaseException):
pass
class TransportError(MyBaseError):
pass
class ErrorFolderNotFound(MyBaseError):
pass
try:
#some code
raise ErrorFolderNotFound
except TransportError:
print("transport error caught")
except ErrorFolderNotFound:
print("folder not found caught")
except Exception as e:
print("exception caught")
那么我們會folder not found caught
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.