返回介绍

10.2 取得反向跟踪的字符串

发布于 2024-01-22 21:44:06 字数 1544 浏览 0 评论 0 收藏 0

如果Python遇到错误,它就会生成一些错误信息,称为“反向跟踪”。反向跟踪包含了出错消息、导致该错误的代码行号,以及导致该错误的函数调用的序列。这个序列称为“调用栈”。

在IDLE中打开一个新的文件编辑器窗口,输入以下程序,并保存为error Example.py:

def spam():
     bacon()
def bacon():
     raise Exception('This is the error message.')

spam()

如果运行errorExample.py,输出看起来像这样:

Traceback (most recent call last):
   File "errorExample.py", line 7, in <module>
     spam()
   File "errorExample.py", line 2, in spam
     bacon()
   File "errorExample.py", line 5, in bacon
     raise Exception('This is the error message.')
Exception: This is the error message.

通过反向跟踪,可以看到该错误发生在第5行,在bacon() 函数中。这次特定的bacon() 调用来自第2行,在spam() 函数中,它又在第7行被调用的。在从多个位置调用函数的程序中,调用栈就能帮助你确定哪次调用导致了错误。

只要抛出的异常没有被处理,Python 就会显示反向跟踪。但你也可以调用traceback.format_exc(),得到它的字符串形式。如果你希望得到异常的反向跟踪的信息,但也希望except语句优雅地处理该异常,这个函数就很有用。在调用该函数之前,需要导入Python的traceback模块。

例如,不是让程序在异常发生时就崩溃,可以将反向跟踪信息写入一个日志文件,并让程序继续运行。稍后,在准备调试程序时,可以检查该日志文件。在交互式环境中输入以下代码:

>>> import traceback
>>> try:
           raise Exception('This is the error message.')
except:
           errorFile = open('errorInfo.txt', 'w')
           errorFile.write(traceback.format_exc())
           errorFile.close()
           print('The traceback info was written to errorInfo.txt.')

116
The traceback info was written to errorInfo.txt.

write() 方法的返回值是116,因为116个字符被写入到文件中。反向跟踪文本被写入errorInfo.txt。

Traceback (most recent call last):
   File "<pyshell#28>", line 2, in <module>
Exception: This is the error message.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文