Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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
使用多个Except块的Python Try/Except_Python_Exception - Fatal编程技术网

使用多个Except块的Python Try/Except

使用多个Except块的Python Try/Except,python,exception,Python,Exception,正如预期的那样,在第5行提出的Exception()不会出现在最后的Exception子句中。为了捕获exception KeyError块内部的异常,我必须添加另一个try…exception,如下所示,并复制最后的exception逻辑: try: raise KeyError() except KeyError: print "Caught KeyError" raise Exception() except Exception: print "Caught

正如预期的那样,在第5行提出的
Exception()
不会出现在最后的
Exception
子句中。为了捕获
exception KeyError
块内部的异常,我必须添加另一个
try…exception
,如下所示,并复制最后的
exception
逻辑:

try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    raise Exception()
except Exception:
    print "Caught Exception"

在Python中,是否可以像我尝试做的那样,将执行流传递到最后的
异常块之外的
块?如果没有,是否有减少逻辑重复的策略?

您可以添加另一级别的
尝试
嵌套:

try:
    raise KeyError()
except KeyError:
    print "Caught KeyError"
    try:
        raise Exception()
    except Exception:
        print "Caught Exception"
except Exception:
    print "Caught Exception"

对将用于处理异常的代码放入函数中。然后在两个位置调用该函数。
除外
子句只捕获在
try
中抛出的错误;否则,如果你想的话,你就不能再加薪了。嗯,你能解释一下你想要达到的目标吗?重新引发捕获的异常的标准方法是
raise
,您最终决定不处理该异常,而不做任何其他处理。在这种情况下,这可能符合您的要求,也可能不符合您的要求。单从您的代码无法判断。我将给出比@JLPeyret更有力的建议:不要将异常用于流控制。你到底想达到什么目的?也许有更优雅的解决方案。
try:
    try:
        raise KeyError()
    except KeyError:
        print "Caught KeyError"
        raise Exception()
except Exception:
    print "Caught Exception"