- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的代码:
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'
当我运行上面的代码时,输出是这样的:
error occur
---oo
get AError
finally
---oo
get AError
finally
---oo
get AError
finally
我认为字符串"error occur"
应该出现三次,比如"---oo"
,但它只出现了一次;为什么?
最佳答案
澄清Paul's answer ,这是一个简单的例子:
class Test(object):
print "Class being defined"
def __init__(self):
print "Instance being created"
for _ in range(3):
t = Test()
此输出将是:
Class being defined
Instance being created
Instance being created
Instance being created
在 class
定义内但在方法 def
initition 之外的代码 仅在定义类时运行一次。
如果您希望代码每当创建一个实例时运行,它应该在__init__
实例方法(或者,偶尔, __new__
类方法)。但是,请注意,如果您为子类定义 __init__
,您应该确保它也调用父类(super class)的 __init__
:
class AError(Exception):
def __init__(self, *args, **kwargs):
Exception.__init__(self, *args, **kwargs) # call the superclass
print 'error occur' # print your message
这确保子类支持父类(super class)的参数;在 Exception
的情况下,您可以例如传递错误信息:
>>> raise AError("Something went wrong.")
error occur # your message gets printed when the instance is created
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
raise AError("Something went wrong.")
AError: Something went wrong. # the error message passes through to the traceback
有关 *args, **kwargs
语法的解释,如果您不熟悉它,请参阅例如What does ** (double star) and * (star) do for parameters? .您还可以使用 super
调用父类(super class)方法,参见例如Understanding Python super() with __init__() methods .
关于python - 对自定义 Exception 的 try/except 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733648/
我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序
我在 GHC 8.0.1 中遇到了一个带有种类索引 (?) GADT 的奇怪情况,其中在类型与种类签名中引入 foralls 会产生不同的类型检查行为。 考虑以下数据类型: {-# LANGUAGE
我正在使用 Perl 5.10 开发应用程序,HTML::Mason和 Apache 2.2。这是我第一次在大型项目中使用 Perl 5.10。我每隔一段时间就会出现奇怪的行为。应用程序因一个非常奇怪
我正在尝试将文件上传到aws中的rust中,因为我使用的是 rusoto_s3 的s3 rust客户端,当这些部分从单个线程发送时,我设法使分段上传代码正常工作不是我想要的,我想上传大文件,并且希望能
我是一名优秀的程序员,十分优秀!