我的代码:
class AError(Exception):
print 'error occur'
for i in range(3):
try:
print '---oo'
raise AError
except AError:
print 'get AError'
else:
print 'going on'
finally:
print 'finally'
当我运行上述代码时,输出如下:
^{pr2}$
我认为字符串"error occur"
应该出现三次,就像"---oo"
,但它只出现一次;为什么?在
Tags:
我强烈建议不要在你的异常中放置任何print语句,尤其是它们的构造函数!例外是语义实体,如果需要,可以打印出来。如果必须自动打印,请至少使用
logging
或类似的软件包。在您可能不知道的是,您可以收集异常实例以在
except
子句中使用,如下所示:为了澄清Paul's answer,下面是一个简单的例子:
由此产生的输出将是:
^{pr2}$在
class
定义内但在方法def
初始化之外的代码在定义类时只运行一次。在如果您希望代码在创建实例时运行,那么它应该在
__init__
实例方法中(或者,偶尔使用__new__
类方法)。但是,请注意,如果您为子类定义__init__
,您可能应该确保它也调用了超类的__init__
:这确保了子类支持超类的参数;在
Exception
的情况下,可以传递错误消息:有关
*args, **kwargs
语法的解释,如果您不熟悉,请参见例如What does ** (double star) and * (star) do for parameters?。{3}你也可以使用超类来调用。在对于整个类,
'error occur'
只打印一次。在您可能期望它为所创建的类的每个实例运行。在
为了实现这一点,请将其放入
__init__
函数中在创建
AError
的实例时调用__init__
。在相关问题 更多 >
编程相关推荐