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。