Python自定义异常类

Python提供了很多内置的异常类, 涉及的范围很广, 能够满足很多需求. 但有时候我们想自定义创建异常类,因为异常处理是基于异常所属的类型, 所以如果想对某种错误进行特殊的错误处理, 就需要有一个专门用于表示这种异常的类.

如何自定义异常类呢? 就和创建其它类一样, 但必须直接或间接地继承Exception.

class SomeCustomeExceptionError(Exception):
    pass
  • 尽量使用内置的异常类, 确有必要时, 再自定义异常类;
  • 由于大多数Python内置异常的名字都以Error结尾, 自定义异常类命名时应尽量跟标准的异常命名一样;

Example:

class InputError(Exception):
'''当输出有误时, 抛出此异常'''

# 自定义异常类型初始化
def __init__(self, value):
    self.value = value

# 返回异常类对象的说明信息
def __str__(self):
    return ('{} is invalid input'.format(repr(self.value)))

try:
    raise InputError(1)
except InputError as err:
    print('error: {}'.format(err))

Exception

Python提供了大量内置的异常类, 这些异常类之间有严格的继承关系, 如下图所示:

../../_images/exception.png

可以看到, BaseException是Python中所有异常类的基类, 但对于我们来说, 最主要的是Exception类, 因为程序中可能出现的各种异常, 都继承自Exception. 用户自定义的异常类, 不应该继承BaseException, 而应该继承Exception类.

except Exceptionexcept的区别:

  • except Exception表示捕获所有继承自Exception的异常;
  • except表示所有异常(继承自BaseException的异常), 包括Ctrl + C或者调用sys.exit来退出程序的企图, 都会被捕获.