如何处理从except块引发的异常链接

时间:2016-11-08 15:58:57

标签: python python-3.x exception-handling

在我的示例中,我有一个自定义异常类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

1 个答案:

答案 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