📅  最后修改于: 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')