如何在python关闭时调试异常

如何在python关闭时调试异常,python,Python,当我的进程结束时,我将输出到stderr,如下所示: Exception exceptions.TypeError: "'NoneType' object is not callable" in <function <lambda> at 0x5507d70> ignored Exception exceptions.TypeError:忽略中的“'NoneType'对象不可调用” 我的理解是,这是由垃圾收集(del()?)期间生成的异常或我知道在此应用程序中正在

当我的进程结束时,我将输出到stderr,如下所示:

  Exception exceptions.TypeError: "'NoneType' object is not callable" in <function <lambda> at 0x5507d70> ignored
Exception exceptions.TypeError:忽略中的“'NoneType'对象不可调用”
我的理解是,这是由垃圾收集(del()?)期间生成的异常或我知道在此应用程序中正在使用的weakref回调引起的


有哪些方法可以找出这是从哪里来的?

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

a = lambda: 1
print a.func_code.co_filename
print a.func_code.co_firstlineno
a.\uuuu code\uuuu
python3。)

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


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

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

你能用真正的函数替换lambda吗?这太普通了。你能多发一些输出吗?以及可能执行的最后几行代码。由于信息太少,很难判断您是只是遇到了意外的错误设置变量,还是遇到了更奇怪的问题。我正在寻找一种针对此类错误的通用解决方案。真的,我只是想知道当这种情况发生时,是否有办法从解释器中获得更多信息。完整的跟踪就好了。我怀疑实际问题是由于一些模块在调用此函数之前被垃圾收集。正如S.Lott所建议的,获取更多信息的第一个关键步骤是忘记存在
lambda
并系统地使用
def
,这样所有的函数都会被命名,并且您会得到问题发生位置的第一个指示;然后使用try/except来修饰该函数中的调用,以查看被调用方的名称;等等,等等。是的,这就是我最后做的。不幸的是,这意味着在我正在使用的代码或库中跟踪lambda的任何使用情况。。。。在这种情况下,炼金术是罪魁祸首@斯洛特,如果你想回答这个问题,我想这是我能得到的最好答案。