4

根据Python (2.7) 文档

由于调用 __del__() 方法的不稳定环境,在执行期间发生的异常将被忽略,而是向 sys.stderr 打印警告

完全且绝对忽略 __del__() 中引发的异常的最 Pythonic 方式是什么——也就是说,不仅忽略异常,而且不打印任何内容到 sterr。有没有比临时将 stderr 重定向到空设备更好的方法?

4

3 回答 3

7

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

def __del__(self):
    try:
        # do whatever you need to here
    except Exception:
        pass

对 stderr 的日志记录仅适用__del__().

于 2012-12-20T18:08:22.483 回答
3

只需在try/except里面使用__del__()

def __del__(self):
   try:
      # ...
   except:
      pass

这将捕获所有异常并且不会打印任何内容。

于 2012-12-20T18:08:11.670 回答
2

只需使用 try/except 块:

def __del__(self):
    try:
        something_that_might_throw()
    except:
        pass
于 2012-12-20T18:08:50.453 回答