Python 如何处理从except块引发的异常链接
在我的示例中,我有一个自定义异常类Python 如何处理从except块引发的异常链接,python,python-3.x,exception-handling,Python,Python 3.x,Exception Handling,在我的示例中,我有一个自定义异常类MyCustomException,主要是将一个整数a除以零,这将引发一个ZeroDivisionError异常。使用except块,我捕获zeroditionerror,然后从err中引发MyCustomException;这将创建一个链式异常,即我自己的异常,加上err中的异常 现在,我如何捕获链式异常,或者链式异常是如何工作的?Python不允许我用块以外的捕获代码中的MyCustomException class MyCustomException(Ex
MyCustomException
,主要是将一个整数a
除以零,这将引发一个ZeroDivisionError
异常。使用except块,我捕获zeroditionerror
,然后从err
中引发MyCustomException
;这将创建一个链式异常,即我自己的异常,加上err
中的异常
现在,我如何捕获链式异常,或者链式异常是如何工作的?Python不允许我用块以外的捕获代码中的MyCustomException
class MyCustomException(Exception):
pass
a=10
b=0
reuslt=None
try:
result=a/b
except ZeroDivisionError as err:
print("ZeroDivisionError -- ",err)
raise MyCustomException from err
except MyCustomException as e:
print("MyException",e) # unable to catch MyCustomException
执行时得到的输出:
ZeroDivisionError -- division by zero
Traceback (most recent call last):
File "python", line 13, in <module>
MyCustomException
ZeroDivisionError——被零除
回溯(最近一次呼叫最后一次):
文件“python”,第13行,在
MyCustomException
在except
子句中使用raise
不会在同一try
块中搜索异常处理程序(它不会出现在该try
块中)
它将搜索一级以上的处理程序,即外部try
块。如果找不到,它将像正常情况一样中断执行(导致显示异常)
简言之,您需要在外部级别使用适当的(MyCustomException除外)try
,以捕获自定义异常:
try:
try:
result=a/b
except ZeroDivisionError as err:
print("ZeroDivisionError -- ",err)
raise MyCustomException from err
except MyCustomException as e:
print("Caught MyException", e)
在执行时,现在打印出:
ZeroDivisionError -- division by zero
Caught MyException