python 异常

第一:基于类的异常

class General:
    pass
class Specific(General):
    pass

raise Specific()
自定义异常类最好继承Exception内置异常类,但这并不是必须的。继承内置异常类,可以让自定义异常类获得一些

免费的有用的接口和工具。

class MyException(Exception):
    pass
class Specific(MyException):
    pass

第二:定义异常文本

class MyException:
    pass

raise MyException
输出:

  File "test.py", line 4, in <module>
    raise MyException
__main__.MyException: <__main__.MyException instance at 0x7f1d90714638>
显示并不是很友好,可以自定义显示信息。

class MyException:
    def __str__(self):
        return "my-fault"

raise MyException
输出:

  File "test.py", line 5, in <module>
    raise MyException
__main__.MyException: my-fault
通过__str__可以实现自定义异常文本


如果继承于内置异常类Exception,则构造方法的参数会自动存储并显示在异常消息中。

class MyException(Exception):
    pass

raise MyException('a', 'b')
输出:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    raise MyException('a', 'b')
__main__.MyException: ('a', 'b')
同样,如果不喜欢这个默认输出信息,可以重新__str__方法来实现自定义显示。


第三:发送额外数据

class MyException(Exception):
    def __init__(self, file):
        self.file = file

def catcher():
    try:
        raise MyException("my-file")
    except MyException, X:
        print X.file

catcher()

你可能感兴趣的:(python 异常)