在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为异常。这些异常有的是由于开发者一时疏忽将关键字敲错导致的,这类错误多数产生的是“SyntaxError:invalid syntax”(无效语法),这将直接导致程序不能运行,这类异常是显示的,在开发阶段很容易发现。还有一类是隐式的,通常和使用者的操作有关。
Python中常见异常类名描述
BaseException所有异常的基类
Exception常规异常的基类
AttributeError对象不存在此属性
IndexError序列中无此索引
IOError输入/输出操作失败
KeyboardInterrupt用户中断执行
KeyError映射中不存在此键
NameError找不到名字(变量)
SyntaxErrorPython语法错误
TypeError对类型无效的操作
ValueError传入无效的参数
ZeroDivisionError除(或取模)运算的第二个参数为0
ConnectionError与连接相关异常的基类
异常处理语句
在程序开发时,有些错误并不是每次运行都会出现,如果需要在开发程序时对可能出现异常的情况进行处理。
try……except语句
在Python中 ,提供了try……except语句捕获并处理异常,在使用时,把可能产生异常的代码放在try语句块中,把处理结果放在except语句块中,这样,当try语句块中的代码出现错误,就会执行except语句块中的代码,如果try语句块中的代码没有错误,那么except不会执行。
语法try:
block1
except [ExceptionName [as alias]]
block2
except [ExceptionName [as alias]]
block3
参数说明:
block1:表示可能出现错误的代码块
ExceptionName [as alias]:可选参数,用于指定要捕获的异常,如果需要捕获多个异常,后面跟多个异常名,用“,”分隔。其中, ExceptionName表示要不会异常的名称,如果在其右侧加上“as alias”,则表示为当前异常赋值给alias,通过该别名,可以记录异常的具体内容。
在使用try……except语句捕获异常时,如果在except后面不指定异常名称,则表示捕获全部异常。
block2:表示进行异常处理的代码块。在这里可以输出固定的提示信息,也可以通过别名输出异常具体内容。
使用try……except语句捕获异常后,当程序出错时,输出错误信息后,程序会继续执行。
try……except……else语句
在Python中,还有另一种异常处理结构,它是try……except……else语句,也就是在原来try……except语句基础上再添加一个else子句,用于指定当try语句块中没有发现异常时要执行的语句块。该语句块中的内容在try语句中发现异常时,将不被执行。
try……expect……finally语句
完整的异常处理语句应该包括finally代码块,通常情况下,无论程序中有无异常产生,finally代码块中的代码都会被执行。
语法:try:
block1
except [ExceptinName [as alias]]
block2
finally:
block3
对于try……except……finally语句的理解并不复杂,它只是比try……expect语句多了个finally代码块,如果程序中有一些在任何情形中都必须执行的代码,那么就可以将他们放在finally语句的区块中。
使用except子句是为了允许处理异常。无论是否引发异常,使用finally子句都可以执行,如果分配了有限的资源(如打开文件),则应将释放这些资源的代码放置在finally块中。
使用raise语句抛出异常
如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用raise语句在函数或方法中抛出异常。
语法raise [ExceptionName [(reason)]]
[ExceptionName [(reason)]]:为可选参数,用于指定抛出异常的名称,以及异常信息的相关描述。如果省略,就会把当前的错误原样抛出。
[ExceptionName [(reason)]]参数中的(reason)也可省略,如果省略,则在抛出异常时,不附带任何描述信息。