8.2 让事情沿你指定的轨道出错
正如你看到的,出现问题时,将自动引发异常。先来看看如何自主地引发异常,还有如何创建异常,然后再学习如何处理这些异常。
8.2.1 raise 语句
要引发异常,可使用raise语句,并将一个类(必须是Exception的子类)或实例作为参数。将类作为参数时,将自动创建一个实例。下面的示例使用的是内置异常类Exception:
>>> raise Exception
Traceback (most recent call last):
File "", line 1, in ?
Exception
>>> raise Exception('hyperdrive overload')
Traceback (most recent call last):
File "", line 1, in ?
Exception: hyperdrive overload
在第一个示例(raise Exception)中,引发的是通用异常,没有指出出现了什么错误。在第二个示例中,添加了错误消息hyperdrive overload。
有很多内置的异常类,表8-1描述了最重要的几个。在“Python库参考手册”的Built-inExceptions一节,可找到有关所有内置异常类的描述。这些异常类都可用于raise语句中。
>>> raise ArithmeticError
Traceback (most recent call last):
File "", line 1, in ?
ArithmeticError
表8-1 一些内置的异常类
类 名 描 述
Exception 几乎所有的异常类都是从它派生而来的
AttributeError 引用属性或给它赋值失败时引发
OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
IndexError 使用序列中不存在的索引时引发,为LookupError的子类
KeyError 使用映射中不存在的键时引发,为LookupError的子类
NameError 找不到名称(变量)时引发
SyntaxError 代码不正确时引发
TypeError 将内置操作或函数用于类型不正确的对象时引发
ValueError 将内置操作或函数用于这样的对象时引发:其类型正确但包含的值不合适
ZeroDivisionError 在除法或求模运算的第二个参数为零时引发
领取专属 10元无门槛券
私享最新 技术干货