Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中运行代码以在出现错误时删除对象_Python_Exception - Fatal编程技术网

如何在python中运行代码以在出现错误时删除对象

如何在python中运行代码以在出现错误时删除对象,python,exception,Python,Exception,所以,我正在构建一个基础设施,处理自动旋转实例、设置安全组等问题 有时,在经历开发过程时,事情会破裂。处理所有事情的对象在实例化过程中会抛出一个错误,或者是无数其他错误中的一个。当这种情况发生时,我基本上要承担大量的基础设施 问题是我不知道何时/何地会抛出错误。那么,我的问题是,在出现错误的情况下,是否有任何方法可以运行一些分解代码?例如: class Foo(object): def __init__(self): # set up ec2 instance

所以,我正在构建一个基础设施,处理自动旋转实例、设置安全组等问题

有时,在经历开发过程时,事情会破裂。处理所有事情的对象在实例化过程中会抛出一个错误,或者是无数其他错误中的一个。当这种情况发生时,我基本上要承担大量的基础设施

问题是我不知道何时/何地会抛出错误。那么,我的问题是,在出现错误的情况下,是否有任何方法可以运行一些分解代码?例如:

class Foo(object):
    def __init__(self):
        # set up ec2 instance
        raise SomeError()

    def __on_error__(self):
        # tear down ec2 instances

另一个约束条件是,一些分解代码可能会出错,这很好。通常情况下,当我试图拆除一些实际上还没有被实例化的东西时,就会发生这种情况。理想情况下,
\u on\u error\u
函数中的任何内容都会无声地失败,但如果不将所有内容包装在一个
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:
    ...
当您到达该命令集的末尾时,
\uuuuuuuuuuuuuuu
方法将运行


请注意,如果在
Foo中引发异常,这对您没有帮助。\uuuuu init\uuuuuuu
因为上下文在
Foo之后才会输入。\uuuuuu enter\uuuuuuu
返回。

如果enter中发生错误,上下文是否会立即运行并退出?@SlaterTyranus-否。上下文在
\uuu enter\uuuuuuu
返回之后输入。