Python:即使在try/except子句中捕获,也会引发异常
在我的代码中,我希望在异常发生时捕获它,将异常附近的一些信息打印到屏幕上,然后在完成后结束脚本。我试图使用与以下代码等效的东西,但我不明白为什么我会得到我所做的回溯 执行时:Python:即使在try/except子句中捕获,也会引发异常,python,exception,python-3.x,exception-handling,try-catch,Python,Exception,Python 3.x,Exception Handling,Try Catch,在我的代码中,我希望在异常发生时捕获它,将异常附近的一些信息打印到屏幕上,然后在完成后结束脚本。我试图使用与以下代码等效的东西,但我不明白为什么我会得到我所做的回溯 执行时: try: 1 / 0 except ZeroDivisionError: print("Exception: ZeroDivisionError") raise Exception 控制台内容如下: Exception: ZeroDivisionError Traceback (most rece
try:
1 / 0
except ZeroDivisionError:
print("Exception: ZeroDivisionError")
raise Exception
控制台内容如下:
Exception: ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#19>", line 2, in <module>
1 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#19>", line 5, in <module>
raise Exception
Exception
异常:零错误
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
1/0
ZeroDivision错误:被零除
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第5行,在
引发异常
例外情况
我想如果我捕获到ZeroDivisionError
,它将不再被引发,唯一会显示的是我在最后执行的raiseexception
,但两者都会显示在控制台中
为什么它们都会显示,我如何更改代码以便只显示第二个,或者是否有更好的方法来实现我想要的?控制台在此处显示上下文;当从异常处理程序引发异常时,Python将活动异常附加为\uuuuu context\uuuu
属性,并且如果新异常未被处理,Python稍后将显示该上下文。如果您不想显示上下文,则需要提供原因;您可以使用raise。。。从“无”
:
try:
1 / 0
except ZeroDivisionError:
print("Exception: ZeroDivisionError")
raise Exception from None
引述:
from
子句用于异常链接:如果给定,第二个表达式必须是另一个异常类或实例,然后它将作为\uuuuuuuuuuuu原因
属性(可写)附加到引发的异常。如果未处理引发的异常,将打印两个异常[…]
如果在异常处理程序中引发异常,则类似的机制会隐式工作:然后将前一个异常作为新异常的\uuuuuu上下文\uuuuu
属性[…]
从以下方面:
当引发(或重新引发)一个except
子句\uuuuu context\uuuu
中的异常时,会自动设置为最后捕获的异常;如果未处理新异常,则最终显示的回溯将包括原始异常和最终异常
当引发新异常时(而不是使用裸的raise
重新引发当前正在处理的异常),可以通过使用from
和raise
以明确原因补充隐式异常上下文:
raise new_exc from original_exc
from后面的表达式必须是异常或None
。在引发的异常上,它将被设置为\uuuuuu原因\uuuuuu
。设置\uuuuuuuuuuuuuuuuuu
也会隐式地将\uuuuuuuuuuuu抑制上下文\uuuuuuuu
属性设置为真
,以便使用从无引发新异常
有效地将旧异常替换为新异常,以便显示(例如,将键错误
转换为属性错误
),将旧异常保留在\uuuuuuuuuuuuuuu上下文中,以便调试时进行自省
除了异常本身的回溯之外,默认回溯显示代码还显示这些链接异常。\uuuu原因
中的显式链接异常在出现时始终显示。只有在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
为无且\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
raiseexceptionfromnone
在pythonshell中给出SyntaxError。这是自然行为吗?@SencerH.:这只适用于Python 3。如果您看到语法错误,那么您将使用Python 2。