忽略在__del __()中打印到stderr的异常

plo*_*lok 2 python

根据Python(2.7)文档:

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

什么是最完全和绝对地忽略__del __()中引发的异常的Pythonic方法 - 也就是说,不仅忽略了异常,而且还没有打印到sterr.有没有比暂时将stderr重定向到空设备更好的方法?

And*_*ark 6

我假设这是在__del__()你正在编写的函数中,如果是这样,只需自己捕获异常并忽略它.

def __del__(self):
    try:
        # do whatever you need to here
    except Exception:
        pass
Run Code Online (Sandbox Code Playgroud)

记录到stderr仅适用于未捕获的异常__del__().

  • @Juan 你可以 [monkey patch](http://en.wikipedia.org/wiki/Monkey_patch) 库,例如如果类是 `lib.Cls` 那么你可以做 `old_del = lib.Cls.__del__` , `def new_del(self): try: old_del(self) except Exception: pass` `lib.Cls.__del__ = new_del`。(显然这段代码需要一些换行符和缩进)。 (2认同)