功能介绍
异常是一种语言特性,专门用于处理程序执行期间的不正常情况。异常的最常见用途就是处理程序执行期间出现的错误,但也可以有效用于很多奇台目的。
使用说明
异常是Python函数用raise语句自动生成的对象。在异常对象生成后,引发异常的raise语句将改变Python程序的执行方式,这与正常的执行流程不同了。
捕获并处理异常用到try、except,有时还会用到else关键字。
try:body #执行该段代码except exception_type1 as var1:exception_code1 #如果body代码中有exception_type1类型的异常,那么进行exception_code1的处理except exception_type2 as var2:exception_code2 #如果body代码中有exception_type2类型的异常,那么进行exception_code2的处理except:default_exception_code # body代码中有其他类型(非exception_type1和exception_type2类型)的异常,那么进行default_exception_code的处理else: #很少用到,当body中没有抛出throw任何错误的时候,该语句才会执行else_bodyfinally: #该语句也是可选的,在try、except、else部分都执行完毕后执行finally_body
自定义异常
class MyError(Exception):pass#以上代码创建了一个类(关于类的详细描述,后续在OOP章节中再介绍),该类将继承基类Exception中的所有内容#可以通过如下方式在Python中使用try:raise MyError('抛出错误')except MyError as my:print('错误信息',my)#错误信息 抛出错误
assert语句是raise语句的特殊形式,形式如下
assert expression,argument
如果expression的结算结果为False,同事系统变量debug也为True,则会引发携带可选参数argument的AssertError异常。
name = []assert len(name)>1 ,'测试'#打印内容如下'''Traceback (most recent call last):File "C:/Users/Administrator/PycharmProjects/Demo/Test.py", line 2, in <module>assert len(name)>1 ,'测试'AssertionError: 测试'''
with关键字的上下文管理器
在某些场景下,存在务必要做的操作,文件的读取,打开一个文件后,当读写完毕时,一定会关闭这个文件,那么这个关闭操作即为务必要做的操作,通常代码如下所写
try:infile = open(filename)data = infile.read()finally:infole.close() #此操作即为务必执行的操作
Python3为这种情景提供了一种更加通用的解决方案,即上下文管理器。上下文管理器将代码块包裹起来,对进入和离开代码块的操作进行集中管理。用with关键字进行标记。文件对象就是一种上下文管理器,可以如下操作:
with open(filename) as infile:data = infile.read()
上下文管理器非常适合于资源加/解锁,关闭文件,提交数据库事务之类的操作。
