簡體   English   中英

python異常除塊外出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM