📜  Python中的用户定义异常

📅  最后修改于: 2020-04-08 08:50:38             🧑  作者: Mango

当代码出错时,Python会引发错误和异常,这可能导致程序突然停止。Python还通过try-except提供了异常处理方法。一些最常见的标准异常包括IndexError,ImportError,IOError,ZeroDivisionError,TypeError和FileNotFoundError。用户可以使用异常类创建自己的错误。

创建用户定义的异常

程序员可以通过创建新的异常类来命名自己的异常。需要从Exception类直接或间接派生异常。尽管不是强制性的,但大多数异常的名称都以Error结尾,类似于Python中标准异常的命名。例如:

# 从超类Exception派生用于创建用户定义的异常类MyError的Python程序
class MyError(Exception):
    # 构造函数
    def __init__(self, value):
        self.value = value
    # __str__ 用来打印 print()的值
    def __str__(self):
        return(repr(self.value))
try:
    raise(MyError(3*2))
# 异常值被存储
except MyError as error:
    print('一个异常产生: ',error.value)

输出:

('一个异常产生: ', 6)

完全了解异常类

要了解有关类异常的更多信息,请运行以下代码

help(Exception)

从超类异常派生错误

当模块需要处理几个不同的错误时,将创建超类异常。常用的方法之一是为该模块定义的异常创建基类。此外,定义了各种子类来为不同的错误条件创建特定的异常类。

# 类错误是从超类异常派生的例子
class Error(Exception):
    # 错误是Exception的派生类,但此模块中是异常的基类
    pass
class TransitionError(Error):
    # 在尝试不允许的状态转换时引发。
    def __init__(self, prev, nex, msg):
        self.prev = prev
        self.next = nex
        # 引发的错误消息保存在msg中
        self.msg = msg
try:
    raise(TransitionError(2,3*2,"非法"))
# 异常值被存储
except TransitionError as error:
    print('异常发生: ',error.msg)

输出:

('异常发生: ', '非法')

如何使用标准异常作为基类?
运行时错误是一个类,它是标准异常,当生成的错误未归入任何类别时会引发此错误。该程序说明了如何将运行时错误用作基础类,将网络错误用作派生类。以类似的方式,任何异常都可以从Python的标准异常派生而来。

# NetworkError继承RuntimeError而非Exception
class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg
try:
    raise Networkerror("Error")
except Networkerror as e:
    print (e.args)

输出:

('E', 'r', 'r', 'o', 'r')