如何在不退出Python程序的情况下打印异常?

1,474 阅读2分钟

问题的提出

给出一个基本的Python程序。如果发生异常,如何在不退出程序的情况下打印 异常?

例如,考虑下面这个程序,它引发了一个ZeroDivisionError: division by zero

x = 42/0
print('Program is still running')

其输出结果是。

Traceback (most recent call last):
  File "C:\Users\xcent\Desktop\code.py", line 1, in <module>
    x = 42/0
ZeroDivisionError: division by zero

你希望程序在给你一个关于异常的说明后继续运行并执行打印语句。

division by zero
Program is still running

如何在Python中完成这个任务?

基本解决方案。Try/Except

一个异常将立即终止你的程序。为了避免这种情况,你可以在你预期可能发生某种异常的代码周围用一个try/except 块来捕获异常。下面是你如何捕捉并打印一个给定的异常。

要捕捉并打印一个发生在代码片段中的异常,可以用一个缩进的try 块将其包裹起来,然后用命令"except Exception as e" 捕捉异常并将其错误信息保存在字符串变量e 。现在你可以用"print(e)" 来打印错误信息,或者用它来做进一步处理。

这里是一般的_异常处理框架。_

try:
    # ... YOUR CODE HERE ... #
except Exception as e:
    # ... PRINT THE ERROR MESSAGE ... #
    print(e)

在我们的特殊例子中,你要把你的程序从...

x = 42/0
print('Program is still running')

...改为...

try:
    x = 42/0
except Exception as e:
    print(e)

print('Program is still running')

现在,输出是你想要的。

division by zero
Program is still running

完整的回溯错误信息

为了打印错误信息的完整回溯,并保持程序运行而不因错误而退出,你可以使用一个try/except块与traceback 模块的 [format_exc()](https://docs.python.org/3/library/traceback.html "https://docs.python.org/3/library/traceback.html")函数。

  • 用以下方式导入模块 **import traceback**.
  • 打印错误的完整回溯,用 **print(traceback.format_exc())**.

下面是完整的例子代码。

import traceback
import sys

try:
    x = 42/0
except Exception:
    print(traceback.format_exc())


print('Program is still running')

The postHow to Print the Exception Without Exiting Your Python Program?first appeared onFinxter.