在Python中以交互方式运行时清除异常堆栈帧

时间:2014-11-06 23:20:39

标签: python exception-handling

如何在交互式Python会话中以一种也可以在脚本中运行的方式强制在超出范围的对象上调用析构函数?

sys.exc_clear()适用于脚本中捕获的异常。例如,在下面的脚本中,析构函数不是由超出范围的变量触发的,也不是由垃圾收集触发的;它由sys.exc_clear触发。

class A:
    def __del__(self):
        print 'obj deleted'

def test():
    a = A()
    raise Exception()

try:
    test()
except:
    pass

import gc
gc.collect(2)

print 'done test part 1'

import sys
sys.exc_clear()

print 'done test part 2'

输出

done test part 1
obj deleted
done test part 2

另一方面,如果以交互方式运行,除了仅调用test()而不是try-except块之外,析构函数仅在退出时或在下一个异常时调用。

我正在使用Python 2.7.6进行测试,但我想要一个适用于至少2.6 +的解决方案。

0 个答案:

没有答案