Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理从except块引发的异常链接_Python_Python 3.x_Exception Handling - Fatal编程技术网

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