如何在__del__中发现异常堆栈跟踪?

时间:2016-04-19 23:03:31

标签: python garbage-collection

是否有一种简单的方法可以为__del__中发生的异常打印堆栈跟踪?就我而言,没有为此对象定义__del__方法

Exception TypeError: "'NoneType' object is not callable" in <bound method InteractiveSession.__del__ of <tensorflow.python.client.session.InteractiveSession object at 0x2867710>> ignored

2 个答案:

答案 0 :(得分:2)

您必须在__del__内手动检测错误:

def __del__(self):
    try:
        cleanup()
    except Exception:
        import traceback
        traceback.print_exc()

        # Let the error keep propagating.
        raise

没有办法配置Python对__del__引发的异常所做的事情。它是direct callPyErr_WriteUnraisable,无法提供回调,无法打印堆栈跟踪,也无法在之后检索异常信息。

答案 1 :(得分:1)

来自Python Docs,它说:

  

由于调用__del__()方法的不稳定情况,将忽略执行期间发生的异常,并向sys.stderr打印警告。

所以答案是否定的,你不能从__del__的异常中获取堆栈跟踪,除非你自己修改它。