python异常出错除了b

2024-10-04 03:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在不同的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")

但是当我把ErrorFolderNotFoundexcept块移到TransportError块上方时,它会移到右边的块(即ErrorFolderNotFoundexcept块)

 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块中已经定义了某个特定exchangelib错误的except块,它应转到“except block of exception”

在下面的代码中,当出现错误时,它转到TransportError除块之外,但逻辑上它应该转到除块之外的异常

import exchangelib
try:
#some code
raise exchangelib.errors.ErrorFolderNotFound

except exchangelib.errors.TransportError:
  print("transport error caught")

except Exception as e:
  print("exception caught")

Tags: import错误exceptioncodesometransportraiseprint
1条回答
网友
1楼 · 发布于 2024-10-04 03:20:28

不知道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

相关问题 更多 >