私は、(私がコントロールしていない)あまり書かれていないPythonモジュールをクラスにラップしようとしています。問題は、モジュールのclose関数を明示的に呼び出さないと、終了時にPythonプロセスがハングするため、delメソッドを持つクラスでモジュールをラップしようとしましたが、delメソッドは行います例外に関しては呼び出されないようです。Python __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()
デルが呼び出され、Pythonのハングアップされていません。私は何とかPythonがdelを呼び出すように、オブジェクトがスコープから外れるとすぐに(C++のように)強制する必要があります。 私は問題のあるモジュール(つまり、これを最初に引き起こすバグを修正できません)とラッパークラスを使用する人を制御できないことに注意してください( "with"を使用するよう強制することはできません。 出口を使用してください)。
これを解決する方法はありますか?
ありがとうございます!
__del__は使用しないでください。これはC++やデストラクタ向けに作られた言語ではありません。 Python 3.xでは__del__メソッドが本当になくてはなりませんが、誰かが合理的なユースケースを見つけられると確信しています。 __del__を使用する必要がある場合は、http://docs.python.org/reference/datamodel.html – harshil9968
の基本的な制限に注意してください。 – jonrsharpe
私が言ったように、私はクラスを使う人を誰も制御できません。私は彼らに "with"を使用させることはできません。 – Dan