如何 运行 编写代码以在 python 中的错误中拆除对象
How to run code to tear down an object on errors in python
所以,我正在构建一个基础设施来处理自动启动实例、设置安全组等...
有时,在开发过程中会出现问题。处理一切的对象在实例化过程中途抛出一个错误,或者无数其他错误之一。发生这种情况时,我基本上会背负大量的基础设施。
问题是我不知道提前 when/where 会抛出错误。那么我的问题是,在出现任何错误的情况下,有什么办法可以 运行 拆除一些代码吗?例如:
class Foo(object):
def __init__(self):
# set up ec2 instance
raise SomeError()
def __on_error__(self):
# tear down ec2 instances
另一个约束是一些拆卸代码可能会出错,这很好。通常,当我尝试拆除尚未实际实例化的内容时,就会发生这种情况。理想情况下,__on_error__
函数中的任何内容都会无提示地失败,但如果没有将所有内容包装在 try/except:pass
循环中,我不确定如何实现这一点。
看起来有点像您在进行某种资源管理 -- 在这种情况下,上下文管理器非常好:
class Foo(object):
...
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value,tb):
if exc_type is not None:
# exception occurred, do some exception handling specific cleanup.
self.__on_error__()
现在您可以将其用作上下文管理器:
with Foo() as foo:
...
当您执行完那组命令时,__exit__
方法将 运行。
请注意,如果在 Foo.__init__
中抛出异常,这对您没有帮助,因为直到 Foo.__enter__
returns.
之后才输入上下文
所以,我正在构建一个基础设施来处理自动启动实例、设置安全组等...
有时,在开发过程中会出现问题。处理一切的对象在实例化过程中途抛出一个错误,或者无数其他错误之一。发生这种情况时,我基本上会背负大量的基础设施。
问题是我不知道提前 when/where 会抛出错误。那么我的问题是,在出现任何错误的情况下,有什么办法可以 运行 拆除一些代码吗?例如:
class Foo(object):
def __init__(self):
# set up ec2 instance
raise SomeError()
def __on_error__(self):
# tear down ec2 instances
另一个约束是一些拆卸代码可能会出错,这很好。通常,当我尝试拆除尚未实际实例化的内容时,就会发生这种情况。理想情况下,__on_error__
函数中的任何内容都会无提示地失败,但如果没有将所有内容包装在 try/except:pass
循环中,我不确定如何实现这一点。
看起来有点像您在进行某种资源管理 -- 在这种情况下,上下文管理器非常好:
class Foo(object):
...
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value,tb):
if exc_type is not None:
# exception occurred, do some exception handling specific cleanup.
self.__on_error__()
现在您可以将其用作上下文管理器:
with Foo() as foo:
...
当您执行完那组命令时,__exit__
方法将 运行。
请注意,如果在 Foo.__init__
中抛出异常,这对您没有帮助,因为直到 Foo.__enter__
returns.