gpt4 book ai didi

Python __del__ 未调用异常

转载 作者:行者123 更新时间:2023-11-28 17:22:20 24 4
gpt4 key购买 nike

我正试图将一个写得不好的 Python 模块(我无法控制)包装在一个类中。问题是,如果我没有明确调用该模块的 close 函数,那么 python 进程会在退出时挂起,因此我试图用一个具有 del 方法的类来包装该模块,但是del 方法似乎不会在异常时被调用。

例子:

class Test(object):
def __init__(self):
# Initialize the problematic module here
print "Initializing"

def __del__(self):
# Close the problematic module here
print "Closing"

t = Test()
# This raises an exception
moo()

在这种情况下,不会调用 del 并且 python 会挂起。我需要以某种方式强制 Python 在对象超出范围时立即调用 del(就像 C++ 那样)。请注意,我无法控制有问题的模块(即无法首先修复导致此问题的错误),也无法控制使用包装器类的任何人(不能强制他们使用“with”所以我可以'也不要使用 exit)。

有什么好的方法可以解决这个问题吗?

谢谢!

最佳答案

如果您希望在出现异常时释放某些资源,请考虑 __enter__ + __exit__ 范式。

class Test(object):
def __enter__(self):
pass

def __exit__(self):
pass # Release your resources here

with Test() as t:
moo()

当执行进入'with' block 时,调用't'的__enter__()方法,然后由于正常流程或异常,调用't'的__exit__()方法离开 block ' 被调用。

关于Python __del__ 未调用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com