标签: traceback

从该函数中确定函数名称(不使用traceback)

在Python中,不使用该traceback模块,有没有办法从该函数中确定函数的名称?

假设我有一个带功能栏的模块foo.执行时foo.bar(),有没有办法让酒吧知道酒吧的名字?或者更好的是,foo.bar这个名字?

#foo.py  
def bar():
    print "my name is", __myname__ # <== how do I calculate this at runtime?
Run Code Online (Sandbox Code Playgroud)

python function introspection traceback

423
推荐指数
21
解决办法
22万
查看次数

显示正在运行的Python应用程序的堆栈跟踪

我有这个Python应用程序不时被卡住,我无法找到在哪里.

有没有办法告诉Python解释器向您显示正在运行的确切代码?

某种即时堆栈跟踪?

相关问题:

python debugging stack-trace traceback

330
推荐指数
16
解决办法
12万
查看次数

如何在没有回溯的情况下退出Python?

我想知道如何退出Python而不在输出上有回溯转储.

我仍然希望能够返回错误代码,但我不想显示回溯日志.

我希望能够在exit(number)没有跟踪的情况下退出,但是在异常(不是退出)的情况​​下,我想要跟踪.

python exit traceback

270
推荐指数
6
解决办法
59万
查看次数

如果不立即重新引发异常回溯,则会隐藏异常回溯

我有一段类似于此的代码:

import sys

def func1():
    func2()

def func2():
    raise Exception('test error')

def main():
    err = None

    try:
        func1()
    except:
        err = sys.exc_info()[1]
        pass

    # some extra processing, involving checking err details (if err is not None)

    # need to re-raise err so caller can do its own handling
    if err:
        raise err

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

func2引发异常时,我收到以下回溯:

Traceback (most recent call last):
  File "err_test.py", line 25, in <module>
    main()
  File "err_test.py", line 22, in main
    raise err …
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception try-catch traceback

65
推荐指数
4
解决办法
3万
查看次数

获取警告的回溯

在numpy中我们可以做np.seterr(invalid='raise')一个回溯警告而不是引发错误(参见这篇文章).

  • 是否有跟踪警告的一般方法?
  • 当发出警告时,我可以让python进行追溯吗?

python warnings traceback

55
推荐指数
3
解决办法
1万
查看次数

堆栈和框架有什么区别?

在什么情况下我想用一个而不是另一个?

有什么区别:

>>> import inspect
>>> print(inspect.getouterframes(inspect.currentframe()))
[(<frame object at 0x8fc262c>, '<stdin>', 1, '<module>', None, None)]
Run Code Online (Sandbox Code Playgroud)

和:

>>> import traceback
>>> traceback.extract_stack()
[('<stdin>', 1, '<module>', None)]
Run Code Online (Sandbox Code Playgroud)

更新:

另一个:

>>> import sys
>>> print(sys._getframe().f_trace,sys._getframe().f_code)
(None, <code object <module> at 0x8682a88, file "<stdin>", line 1>)
Run Code Online (Sandbox Code Playgroud)

我不明白这里的细微差别:

  • 堆栈框架
  • 框架对象
  • 堆栈跟踪

更新2,问题问题后的一段时间,但非常相关

python sys inspect traceback

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

Python:从multiprocessing.Process获取回溯

我试图从multiprocessing.Process中获取一个traceback对象.不幸的是,通过管道传递异常信息不起作用,因为无法对pickback对象进行pickle:

def foo(pipe_to_parent):
    try:
        raise Exception('xxx')
    except:
        pipe_to_parent.send(sys.exc_info())

to_child, to_self = multiprocessing.Pipe()
process = multiprocessing.Process(target = foo, args = (to_self,))
process.start()
exc_info = to_child.recv()
process.join()
print traceback.format_exception(*exc_info)
to_child.close()
to_self.close()
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 231, in _bootstrap
    self.run()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "foo", line 7, in foo
    to_parent.send(sys.exc_info())
PicklingError: Can't pickle <type 'traceback'>: attribute lookup __builtin__.traceback failed
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来访问异常信息?我想避免传递格式化的字符串.

python exception process multiprocessing traceback

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

如何在Python中获得完整的异常堆栈跟踪

以下片段:

import traceback

def a():
    b()

def b():
    try:
        c()
    except:
        traceback.print_exc()

def c():
    assert False

a()
Run Code Online (Sandbox Code Playgroud)

生成此输出:

Traceback (most recent call last):
  File "test.py", line 8, in b
    c()
  File "test.py", line 13, in c
    assert False
AssertionError
Run Code Online (Sandbox Code Playgroud)

如果我想要完整的堆栈跟踪包括对一个?的调用,我应该使用什么?

如果重要的话我有Python 2.6.6

编辑:我想得到的是,如果我离开尝试除外,我将得到的相同信息,并将异常传播到顶层.这个代码段例如:

def a():
    b()

def b():
    c()

def c():
    assert False

a()
Run Code Online (Sandbox Code Playgroud)

生成此输出:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
    a()
  File "test.py", line 2, in a
    b()
  File "test.py", line 5, in b …
Run Code Online (Sandbox Code Playgroud)

python exception-handling exception traceback

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

如何将python回溯限制为特定文件

我写了很多使用外部库的Python代码.我经常写一个bug,当我运行代码时,我会在Python控制台中获得一个很长的回溯.99.999999%的时间是由于我的代码中的编码错误,而不是因为包中的错误.但是回溯一直到程序包代码中的错误行,要么需要大量滚动回溯来查找我编写的代码,要么回溯是如此深入到我自己的代码所没有的包中.甚至出现在追溯中.

有没有办法"黑盒子"包装代码,或以某种方式只显示我的代码中的追溯线?我希望能够向系统指定我想要追溯的目录或文件.

python debugging traceback

29
推荐指数
2
解决办法
2230
查看次数

traceback()用于交互式和非交互式R会话

我观察到了一个traceback()我不理解的交互式和非交互式R会话之间的不同.对于下面的代码,它会产生错误,但在交互式R会话中,我可以看到回溯信息,而如果我将代码保存到test.R并通过Rscript test.R或调用它R -f test.R,我将无法再看到回溯:

f = function() {
  on.exit(traceback())
  1 + 'a'
}
f()
Run Code Online (Sandbox Code Playgroud)

在交互式R会话中:

> f = function() {
+   on.exit(traceback())
+   1 + 'a'
+ }
> f()
Error in 1 + "a" : non-numeric argument to binary operator
1: f()
Run Code Online (Sandbox Code Playgroud)

非交互式执行:

$ Rscript test.R 
Error in 1 + "a" : non-numeric argument to binary operator
Calls: f
No traceback available 
Execution halted
Run Code Online (Sandbox Code Playgroud)

我没有看到解释?traceback,我想知道是否有一种方法可以为非交互式R会话启用回溯.谢谢!

r traceback

28
推荐指数
2
解决办法
3887
查看次数