首页 > 编程笔记

Python自定义异常类

Python 支持使用类输出异常。类可以是 Python 的内置异常,也可以是用户自定义异常。使用类输出异常是比较好的方式,因为捕捉异常时更有弹性。

用户自定义异常与内置异常并无差别,只是内置异常定义在 exceptions 模块中。当 Python 解释器启动时,exceptions 模块就会事先加载。

Python 允许用户定义自己的异常类,并且用户自定义的异常类必须从任何一个 Python 的内置异常类派生而来。

下面的示例使用 Python 内置的 Exception 异常类作为基类,创建一个用户自定义的异常类 URLError。
class URLError(Exception):
    pass
try:
    raise URLError("这是URL异常")
except URLError as inst:
    print(inst.args[0])
输出结果如下:
这是URL异常

inst 变量是用户自定义异常类 URLError 的实例变量,inst.args 就是该用户定义异常类的 args 属性值。

还可以将所创建的用户自定义异常类再当作其他用户自定义异常类的基类。

下面的示例使用刚刚自定义的 URLError 异常类作为基类,创建一个用户自定义的异常类 HostError。
class HostError(URLError):
    def printString(self):
       print (self.args)
  
try:
    raise HostError("Host Error")
except HostError as inst:
    inst.printString()
输出结果如下:
('Host Error',)

借助重写类的 __str__() 方法可以改变输出字符串,代码如下:
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
         return repr(self.value)
  
try:
    raise MyError(100)
except MyError as e:
    print('异常发生的数值为:', e.value)
输出结果如下:
异常发生的数值为: 100

一般异常类在创建的时候都以 Error 结尾,与标准异常命名一样。

推荐阅读