如何在python关闭时调试异常

rhe*_*ttg 7 python

当我的进程结束时,我得到输出到stderr,看起来像:

  Exception exceptions.TypeError: "'NoneType' object is not callable" in <function <lambda> at 0x5507d70> ignored
Run Code Online (Sandbox Code Playgroud)

我的理解是,这是由垃圾收集(del()?)中生成的异常或我知道在此应用程序中使用的weakref回调引起的.

有哪些方法可以找出它的来源?

Jur*_*nfd 7

使用-v选项运行Python程序,以便在最后阶段的哪个阶段看到抛出异常.当我遇到同样的情况时,它帮助了我; 还有sqlalchemy ......


Gle*_*ard 1

这里的问题不在于 lambda:lambda 函数确实有调试信息。

a = lambda: 1
print a.func_code.co_filename
print a.func_code.co_firstlineno
Run Code Online (Sandbox Code Playgroud)

a.__code__在Python3中。)

问题在于回退异常格式:它没有显示堆栈跟踪,而堆栈跟踪通常是显示此信息的地方。

如果你想尝试改进这一点,问题似乎出在 Python/errors.c 的 PyErr_WriteUnraisable() 中。我不知道是否有任何更深层次的问题使这变得困难,但我怀疑不会。调用 PyErr_Fetch() 后,回溯应位于“tb”中。