python中的堆栈跟踪和异常处理

Posted

技术标签:

【中文标题】python中的堆栈跟踪和异常处理【英文标题】:stack trace and exception handling in python 【发布时间】:2012-09-21 20:54:20 【问题描述】:

我想设计一个python程序来处理其他程序中的异常,我也希望它能够访问python中的堆栈跟踪。我是 python 开发新手,但愿意学习,但我不知道从哪里开始。有人可以指出我可以遵循的方向/资源,并可能发展这些技能,特别是我应该学习什么来实现我的目标。

我想在 python 2.7 上开发这个

感谢您的回复。

编辑:通过处理异常,我只想知道发生了什么异常。就像在 Java 中使用 try catch 块一样,您可以在其中打印出堆栈跟踪并查看它是否是算术/数组越界错误

您好,我也在考虑这一行 像

  try

 (Execute python program here)  // ie import this program 

 except : 1st exception
 except : 2nd exception
 .
 .
 etc

我知道如何从文件中读取,但不确定这对于仅执行其他人编写的程序是否正确?

【问题讨论】:

你不能在其他程序中处理异常,除非你做一个像调试器这样的东西,但这非常复杂。这不是初学者的工作。如果编写一个程序,如果它崩溃或类似的事情会重新打开一个程序,你能做的一切...... 通过处理异常,我只想知道发生了什么异常。就像在 Java 中带有 try catch 块一样,您可以在其中打印出堆栈跟踪并查看它是否是算术/数组越界错误 我明白了。程序通常不会向外界发出异常信号,因此您只能捕获程序内部的异常。你可以捕捉到的是程序的退出代码,但这只发生在它崩溃/退出时。 嗨,我也在考虑这一行的内容,例如尝试(在此处执行 python 程序)// 即导入此程序,除了:第一个异常,除了:第二个异常。 .等我知道如何从文件中读取,但不确定这对于仅执行其他人编写的程序是否正确? 相关:log syntax errors and uncaught exceptions for a python subprocess and print them to the terminal 【参考方案1】:

看看traceback 模块。它格式化和打印堆栈跟踪。您可以使用这是一个***异常处理程序。

import sys
import traceback

try:
    do_something()
except:
    ex, val, tb = sys.exc_info()
    traceback.print_exception(ex, val, tb)

Python 本身基本上对任何未捕获的异常执行此操作,然后退出。

【讨论】:

嗨,我也在考虑这一行的内容,例如尝试(在此处执行 python 程序)// 即导入此程序,除了:第一个异常,除了:第二个异常。 .等我知道如何从文件中读取,但不确定这对于执行其他人编写的程序是否正确? 听起来你真正想要的是在子进程中运行另一个解释器并报告错误代码。也许multiprocessing 模块是您真正需要的。【参考方案2】:

我对你的问题有点困惑;如果您只运行其他 python 代码,这将是自动的。您不需要读取任何文件,只需导入您要使用的 python 模块并调用它们的函数即可。当这些抛出异常时,它们将简单地出现在您的代码中,您可以根据需要处理它们,当然要考虑有关异常处理的最佳实践。

有关 python 异常的快速教程,请查看here。

【讨论】:

重点是,当一个人想要使用它时,他们应该能够导入它,即我不需要调用他们的函数但他们只需要导入我的文件..我希望我说得通。我很困惑这是怎么发生的 如果您需要在导入时执行代码,只需在模块的根级别调用所需的方法。

以上是关于python中的堆栈跟踪和异常处理的主要内容,如果未能解决你的问题,请参考以下文章

获取堆栈跟踪中的参数值

Windows下的异常处理和堆栈跟踪(MinGW/gcc)

Ruby 异常处理:反向堆栈跟踪顺序

如何隐藏 Kafka connect api 未处理异常的堆栈跟踪

Xcode 4.2/iOS 5 下控制台中没有异常堆栈跟踪?

如何在python中获取嵌套异常的堆栈跟踪?