正确的做法是引发异常。默认情况下,异常将从 传播__init__
到调用它的任何人,并最终一直传播到顶部,停止脚本。
但是,如果您想处理该异常并继续,请在您想继续的任何级别使用try
/catch
块,如处理异常中所述。
例如:
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
工厂函数或for
循环中进行检查,在这种情况下,您甚至不需要异常;只是不要初始化。但是没有什么能阻止你在里面提出异常__init__
。