gpt4 book ai didi

Python:证明规则的用户定义异常

转载 作者:太空狗 更新时间:2023-10-29 17:23:32 24 4
gpt4 key购买 nike

Python 文档 states :

Exceptions should typically be derived from the Exception class, either directly or indirectly.

'typically' 这个词让我处于一种模棱两可的状态。

考虑代码:

class good(Exception): pass
class bad(object): pass

Heaven = good()
Hell = bad()

>>> raise Heaven

Traceback (most recent call last):
File "<pyshell#163>", line 1, in <module>
raise Heaven
good

>>> raise Hell

Traceback (most recent call last):
File "<pyshell#171>", line 1, in <module>
raise Hell
TypeError: exceptions must be classes or instances, not bad

所以在阅读 python 文档时,我应该将 'typically' 替换为 '' 吗?

如果我有一个与 Exception 类无关的类层次结构,并且我想“提升”属于该层次结构的对象怎么办?

我总是可以通过参数引发异常:

raise Exception, Hell

这对我来说有点尴尬

Exception(编辑:或 BaseException)类有什么特别之处,以至于只能引发它的家庭成员?

最佳答案

除了 Exception 之外,您还可以继承其他有效的类,例如 BaseException

请参阅 exception hierarchy 的文档.

BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StandardError
etc..

在旧版本的 Python 中,可以抛出异常以外的东西。例如在 Python 2.5 中:

>>> raise "foo"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
foo

但是您会收到此弃用警告:

DeprecationWarning: raising a string exception is deprecated

在较新的版本中这是不允许的。您提出的所有内容都必须派生自 BaseException。

关于Python:证明规则的用户定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2793783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com