在我的示例中,我有一个自定义异常类main.qml
,在main中,我将整数MyCustomException
除以零,这会引发a
异常。使用except块,我抓住ZeroDivisionError
,然后从ZeroDivisionError
提出MyCustomException
;这会创建一个链式异常,我自己,以及err
中的异常。
现在我如何捕获链式异常或链式异常如何工作? Python不允许我在err
块的代码中捕获MyCustomException
。
except
执行时得到的输出:
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
答案 0 :(得分:3)
在raise
子句中使用except
无法在同一try
块中搜索异常处理程序( try
中未出现异常处理程序块)。
它会向上搜索一个处理程序,即一个外部try
块。如果没有找到,它将像往常一样中断执行(导致显示异常)。
简而言之,您需要在外层使用相应的try
封闭except MyCustomException
,以便捕获您的自定义异常:
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