我收到了这个错误:
builtins.TypeError:捕获不从中继承的类 不允许使用BaseException
class a(object):
pass
class b(a):
pass
class c(b):
pass
答案 0 :(得分:2)
我认为这符合预期:
class a(Exception):
pass
class b(a):
pass
class c(b):
pass
raise c("my c is bad!")
打印:__main__.c: my c is bad!
您可以通过以下方式获取异常的字符串:
>>> try:
... raise c('This is C talking to you')
... except c as s:
... print(s)
...
This is C talking to you
修改 根据您的问题和评论中的一点点,这里有一种方法可以使用Exception
的多个类/子类:
>>> x=1
>>> try:
... if x==1: raise b('x is 1!!!')
... else: raise c('I guess x is not 1')
... except (b,c) as s:
... print(s)
...
x is 1!!!
但是,您可能还会将类的不同实例与一个类的子类混淆。您也可以尝试这样的事情:
class MyException(Exception):
def __init__(self,value):
self.value=value
def __str__(self):
return repr(self.value)
# INSTANCES of MyException class:
e1=MyException(1) # the int argument becomes the error
e2=MyException('22') # another instance with a string
e3=MyException({1:33}) # third instance with a dictionary as the result
def f(e):
try:
raise MyException, e
except MyException as s:
return s
for e in (e1,e2,e3):
print(f(e))
打印:
1
'22'
{1: 33}
注意e1,e2和e3以及MyException类的不同实例。 raise
支持将该类的类和实例作为异常进行调用。
如果你真的在寻找一个分层错误类(一旦出现子类错误),那么here is是Python文档中的主题。我想你不是。