- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对两个对象之间的区别感到困惑:
inspect.trace()
返回的帧列表sys.exc_info()[2]
返回的回溯(或传递给 sys.excepthook
的调用)这两个对象是否包含相同的信息,只是组织成不同的数据结构?如果没有,那一个有而另一个没有?
最佳答案
来自 inspect.trace 的文档:
inspect.trace([context])
Return a list of frame records for the stack between the current frame and the frame in which an exception currently being handled was raised in. The first entry in the list represents the caller; the last entry represents where the exception was raised.
这表明它提供了一种很好的方法来对您从 sys.exc_info()[2]
获得的帧进行切片和切 block 。
哪个,如果你看一下来源:
def trace(context=1):
"""Return a list of records for the stack below the current exception."""
return getinnerframes(sys.exc_info()[2], context)
(与 3.2 或 2.7 相同),正是它所做的,但它通过 getinnerframes
传递它,根据文档字符串用一些有用的信息对其进行注释:
Get a list of records for a traceback's frame and all lower frames.
Each record contains a frame object, filename, line number, function name, a list of lines of context, and index within the context.
而且,因为我很好奇这到底意味着什么:
import sys
import inspect
from pprint import pprint
def errorer():
raise Exception('foo')
def syser():
try:
errorer()
except Exception, e:
tb = sys.exc_info()[2]
print tb.tb_frame
print tb.tb_lasti
print tb.tb_lineno
print tb.tb_next
def inspecter():
try:
errorer()
except Exception, e:
pprint(inspect.trace())
当从提示中调用时,回想起许多字段和对象都有 easy-to-find定义:
>>> syser()
<frame object at 0x1441240>
6
10
<traceback object at 0x13eb3b0>
>>> inspecter()
[(<frame object at 0x14a5590>,
'/tmp/errors.py',
22,
'inspecter',
None,
None),
(<frame object at 0x14a21b0>,
'/tmp/errors.py',
8,
'errorer',
None,
None)]
(行号乱跳是因为我弄乱了格式)
inspect.trace()
显然更好一些。
关于python - `inspect.trace()` 与 `traceback`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115022/
如何确保在不包括整个回溯的情况下打印出失败的实际行?追溯对我来说可能太长了,所以我也把它全部打印出来。 此代码仅打印函数 a 和 b 中的错误,但我想查看实际错误发生在函数 d 中。 import t
我有以下内容: try: package_info = __import__('app') #app.py except: print traceback.extract_tb(sys
我有 2 个模块: a.py: import b import traceback try: print b.get_val(1) except Exception as ex: tr
我的 Python 脚本崩溃了。为了调试它,我以交互模式运行它 python -i example.py Traceback (most recent call last): File "exam
我刚开始在 rstudio 中进行调试。一开始一切都按照描述的方式工作 here . 我使用后 browser() ,我无法回到这个状态,也就是说没有互动区,我可以在那里按hide traceback
使用 Lua 演示页面中的以下代码,我试图获取被调用函数的名称。 function test() local info = debug.getinfo(1); for k, v in
假设我有一个非常简单的代码会引发错误: print(1/0) 如何将完整的回溯错误保存到文件中,以便该文件包含: Traceback (most recent call last): File "
我正在编写一个自定义错误处理程序(使用error选项),主要用于与source运行的程序一起使用。在自定义错误处理程序中,我想计算导致错误的源文件的行号。 通常,每当引发错误时,都会将基本环境中的.T
我遇到过 R 中 .Traceback 对象的奇怪行为。 当我尝试打印简短的错误消息时,没问题,.Traceback[[1]] 有一个元素。但是当我尝试打印很长的字符串时,.Traceback[[1]
我发现为一个简单的失败的单元测试获取如此多的细节有点烦人。除了实际定义的断言消息之外,是否可以抑制所有内容? Creating test database for alias 'default'...
我有一个简单的脚本: i=1 while True: try: print i except KeyboardInterrupt: raise Exce
我已经开始编码大约一个星期了,在练习创建一个形状计算器时,我遇到了这样的错误: Traceback (most recent call last): File "python", line 4 if
在测试我使用 rest api 制作的应用程序时,我发现了这种我不理解的行为。 让我们从重现类似的错误开始,如下所示 - 在文件 call.py - 请注意,此文件包含以视觉方式显示自身的代码,例如一
我想查看代码到特定点的完整轨迹 我也是 ... import traceback traceback.print_stack() ... 然后会显示 File ".venv/lib/python3
traceback 模块非常适合捕获和处理异常,但在下面的示例中,它似乎从最近的异常中捕获了一个不完整的堆栈。 考虑两个文件,一个是“mymod.py”: import sys, traceback
我正在尝试对回溯进行一些详细的重新检查并获取实际值来自未能返回更多(更好?)信息的对象回溯。 案例场景在我导入并执行的函数中,如下所示: def foo(): a = True b =
是否可以在 Python 中创建自定义回溯?我正在尝试编写一个函数 raise_from() 来模仿 Python 3 的 raise ... from ...。 def raise_from(exc
我在运行代码时遇到了 Mechanize 问题,我不知道问题出在哪里,也许有人可以帮助我。 > ****************************************************
需要帮忙 我想要的是 : 我想录制麦克风并从 txt 文件中获取持续时间 代码: import sounddevice as sd import numpy as np import scipy.io
令我惊讶的是,当我获取文件时,很难在 R 中准确找到错误发生的位置。例如: > source('Data-Generation.R') ... # some output here Error in
我是一名优秀的程序员,十分优秀!