Я пытаюсь обернуть плохо написанный модуль Python (который я не контролирую) в классе. Проблема в том, что если я не буду явным образом вызывать функцию закрытия этого модуля, тогда процесс 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++). Обратите внимание, что я не контролирую проблемный модуль (т. Е. Не могу исправить ошибку, которая вызывает это в первую очередь), а также не контролирует того, кто использует класс оболочки (не может заставить их использовать «с», поэтому я могу 't использовать выход либо).
Есть ли достойный способ решить эту проблему?
Спасибо!
Не используйте __del__. Это не C++ или язык, созданный для деструкторов. Метод __del__ действительно должен быть удален в Python 3.x, хотя я уверен, что кто-то найдет вариант использования, который имеет смысл. Если вам нужно использовать __del__, имейте в виду основные ограничения на каждый http://docs.python.org/reference/datamodel.html – harshil9968
Оберните его менеджером контекста? – jonrsharpe
Как я уже сказал, у меня нет контроля над тем, кто использует класс. Я не могу заставить их использовать «с». – Dan