我收到此错误:
builtins.TypeError:不允许捕获不继承自 BaseException 的类
class a(object):
pass
class b(a):
pass
class c(b):
pass
我收到此错误:
builtins.TypeError:不允许捕获不继承自 BaseException 的类
class a(object):
pass
class b(a):
pass
class c(b):
pass
我相信这可以按预期工作:
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
支持调用一个类和该类的实例作为异常。
如果您真的在寻找分层错误类(一旦出现子类错误),这里是Python 文档中的主题。我认为你不是。