如何中止python实例创建并继续脚本?

时间:2013-01-28 09:59:56

标签: python instantiation

我实现了一个python类,实例存储在h5文件中。因此,此类的__init__() - 函数首先检查此h5文件是否仍存在于先前的模拟中,如果是这样,则会引发raw_input,要求覆盖此文件(此后文件将被新实例覆盖)或不,之后会出现错误。

我正在寻找一种方法,当这个文件(以及实例)已经存在并且在__init__() - 方法中注明时,我不会在脚本停止之后引发错误,但是“取消”已启动的实例化并且脚本继续...是否有一种干净的方式来实现这样的“取消和ocntinue”?

1 个答案:

答案 0 :(得分:0)

正确的方法来引发异常。默认情况下,异常将从__init__传播到任何调用它的人,最终一直到顶部,停止脚本。

但是,如果您要处理该异常并继续,请使用try / catch阻止您要继续的任何级别,如Handling Exceptions中所述。

例如:

class ThingyAlreadyExistsError(RuntimeError):
    pass

class Thingy(object):
    def __init__(self, pathname):
        if os.path.exists(pathname):
            yn = raw_input('{} already exists. Overwrite (y/N)?'.format(pathname))
            if yn.lower != 'y':
                raise ThingyAlreadyExistsError(pathname)
        # finish initialization

thingies = []
for pathname in pathnames:
    try:
        thingy = Thingy(pathname)
    except ThingyAlreadyExistsError:
        continue
    thingies.append(thingy)

如果您想在访问__init__之前发现这一点,您可以随时使用__new__方法或@classmethod工厂函数或{ {1}}循环,在这种情况下你甚至不需要异常;只是不要初始化。但是没有什么能阻止你在for内提出异常。