相关疑难解决方法(0)

打印python堆栈跟踪,无异常被引发

我的一个类的实例变量正在发生一些事情.我想让变量成为一个属性,无论何时访问它,我都要打印出导致该点的所有代码的堆栈跟踪,这样我就可以看到它被搞乱了.如果没有引发异常,如何打印堆栈跟踪?我知道如果有例外,我可以做类似的事情traceback.format_tb(sys.exc_info()[2]).

另外可能有用的是仅打印最后3-4个级别,因为前几个级别可能不会那么有趣.

python debugging stack-trace

57
推荐指数
2
解决办法
2万
查看次数

获得完整的追溯

如何在以下情况下获得完整的回溯,包括调用func2func函数?

import traceback

def func():
    try:
        raise Exception('Dummy')
    except:
        traceback.print_exc()

def func2():
    func()


func2()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

Traceback (most recent call last):
  File "test.py", line 5, in func
    raise Exception('Dummy')
Exception: Dummy
Run Code Online (Sandbox Code Playgroud)

traceback.format_stack()不是我想要的,因为需要将traceback对象传递给第三方模块.

我对这个案子特别感兴趣:

import logging


def func():
    try:
        raise Exception('Dummy')
    except:
        logging.exception("Something awful happened!")


def func2():
    func()


func2()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到:

ERROR:root:Something awful happened!
Traceback (most recent call last):
  File "test.py", line 9, in func
    raise Exception('Dummy')
Exception: Dummy
Run Code Online (Sandbox Code Playgroud)

python traceback

25
推荐指数
2
解决办法
2万
查看次数

我如何让 python 函数返回异常回溯或结果?

假设我有一个功能:

def ReadFile():
    with open("/etc/passwd") as file:
        data = file.read()
Run Code Online (Sandbox Code Playgroud)

这个函数可能会成功,在这种情况下它需要返回一个结果,或者它可能会失败,在这种情况下我想返回一个异常的回溯,它会通过电子邮件发送给我,所以我知道我的程序中出现了一些错误,确切地说什么失败了。

为此,我可以执行以下操作:

import traceback

def ReadFile():
    try:
        with open("/etc/passwd") as file:
            data = file.read()
    except IOError:
        return traceback.format_exc()
    return data
Run Code Online (Sandbox Code Playgroud)

如果能够成功读取文件,则返回文件的内容。否则,它返回异常的回溯。

traceback.format_exc() 返回一个字符串。如果 ReadFile() 应该返回一个列表或元组或整数(如果它成功),那么事情就很简单了——当你调用 ReadFile() 时,如果返回的结果是一个字符串,你就知道它失败了,你可以运行发送电子邮件的代码您知道错误,如果结果是您期望的类型(int、tuple、list 或 w/e),那么您就知道它起作用了。

如果 ReadFile() 应该返回一个字符串,就像在我的例子中那样,那么比确定 ReadFile() 是成功还是失败变得更加困难,因为您需要解析字符串以确定它是否看起来像回溯或你预期的结果。

有一个更好的方法吗?也许某种方式让回溯返回某种对象,其信息与 traceback.format_exc() 包含的信息相同,以便更容易确定 ReadFile() 是成功还是失败?

python python-2.7

0
推荐指数
1
解决办法
4616
查看次数

标签 统计

python ×3

debugging ×1

python-2.7 ×1

stack-trace ×1

traceback ×1