是否有一种简单的方法可以为__del__
中发生的异常打印堆栈跟踪?就我而言,没有为此对象定义__del__
方法
Exception TypeError: "'NoneType' object is not callable" in <bound method InteractiveSession.__del__ of <tensorflow.python.client.session.InteractiveSession object at 0x2867710>> ignored
答案 0 :(得分:2)
您必须在__del__
内手动检测错误:
def __del__(self):
try:
cleanup()
except Exception:
import traceback
traceback.print_exc()
# Let the error keep propagating.
raise
没有办法配置Python对__del__
引发的异常所做的事情。它是direct call到PyErr_WriteUnraisable
,无法提供回调,无法打印堆栈跟踪,也无法在之后检索异常信息。
答案 1 :(得分:1)
来自Python Docs,它说:
由于调用
__del__()
方法的不稳定情况,将忽略执行期间发生的异常,并向sys.stderr
打印警告。
所以答案是否定的,你不能从__del__
的异常中获取堆栈跟踪,除非你自己修改它。