-2

我收到此错误:

builtins.TypeError:不允许捕获不继承自 BaseException 的类

class a(object):
      pass
class b(a):
      pass
class c(b):
      pass
4

1 回答 1

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支持调用一个类和该类的实例作为异常。

如果您真的在寻找分层错误类(一旦出现子类错误),这里是Python 文档中的主题。我认为你不是。

于 2013-01-22T02:17:35.510 回答