看 core python 时遇到了不解。第 10 章,异常处理部分。
QUOTE:
What happens if the argument is an instance? No problems arise if instance
is an instance of the given exception class. However, if instance is not an
instance of the class or an instance of a subclass of the class, then
a new instance of the exception class will be created with exception
arguments copied from the given instance. If instance is an instance of
a subclass of the exception class, then the new exception will be
instantiated from the sub- class, not the original exception class.
上面引用中第一个 argument 指的是 raise someExceptation instance 中的 instance
书(电子)上的翻译为
QUOTE:
当参数是一个实例的时候会发生什么呢? 该实例若是给定异常类的实例当然不会有问题, 然
而, 如果该实例并非这个异常类或其子类的实例时, 那么解释器将使用该实例的异常参数创
建一个给定异常类的新实例. 如果该实例是给定异常类子类的实例, 那么新实例将作为异常
类的子类出现, 而不是原来的给定异常类.
if instance is not an
instance of the class or an instance of a subclass of the class, then
a new instance of the exception class will be created with exception
arguments copied from the given instance.
如果该实例并非这个异常类或其子类的实例时, 那么解释器将使用该实例的异常参数创
建一个给定异常类的新实例
感觉这里的意思应该是:如果该实例并非这个异常类或子类的实例时,那么解释器将复制该实例作为新建实例的参数。
在同一本书的后面若干页,有
QUOTE:
raise exclass,instance
Raise exception using instance (normally an instance of exclass); if instance
is an instance of a subclass of exclass, then the new exception will be of the
subclass type (not of exclass); if instance is not an instance of exclass or an
instance of a subclass of exclass, then a new instance of exclass will be
created with exception arguments cop- ied from instance
QUOTE:
通过实例触发异常(通常是exclass的实例);如果实例是exclass的子类实例,那么这个新
异常的类型会是子类的类型(而不是exclass);如果实例既不是exclass的实例也不是
exclass子类的实例,那么会复制此实例为异常参数去生成一个新的exclass实例.
但是,随便一个 instance 复制后都可以作为一个 exclass 的参数吗?