例外。从作为类的子类的类继承?

时间:2013-01-22 01:49:26

标签: python python-3.x

我收到了这个错误:

  

builtins.TypeError:捕获不从中继承的类   不允许使用BaseException

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

1 个答案:

答案 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文档中的主题。我想你不是。