今天我们来学习python中异常的捕获和处理,以及上次遗留的三个模块的内容。
一、异常和错误
什么是异常?
异常发生之后,异常之后的代码就不执行了
程序中难免会出现错误,这种错误可分为两种,一种是语法错误,一种是逻辑错误。
1.语法错误
#语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 语法错误
2.逻辑错误
#用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str'
二、异常的种类
在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误。
l=['egon','aa'] l[3]
dic={'name':'egon'} dic['age']
s='hello' int(s)
三、异常的处理
1.使用if判断式
num=input('>>:') if num.isdigit(): int(num) elif num.isspace(): print('输入的是空格,就执行我') elif len(num)==0: print('输入的是空,就执行我') else: print('其它情况,执行我')
2.语法结构处理异常
1)基本语法
try: 被检测的代码块 expect 异常类型: try一旦检测到异常,就执行这个位置的逻辑
f = open('a.txt') g = (line.strip() for line in f) for line in g: print(line) else: f.close()
try: f = open('a.txt') g = (line.strip() for line in f) print(next(g)) #next(g)触发迭代 print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
2)异常类只能处理指定的异常情况,如果非指定异常则不能处理
s1='hello' try: int(s1) except IndexError as e: print(e) #没有捕获到异常,直接报错
3)多分支
s1='hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e)
4)万能异常(在python中有一个万能异常(Excpteion),它可以捕获任意异常)
s1 = 'hello' try: int(s1) except Exception as e: print(e)
无论什么异常,只要一个Exception就足够,如下:
s1 = 'hello' try: int(s1) except Exception,e: '丢弃或者执行其他逻辑' print(e) #如果你统一用Exception,没错,是可以捕捉所有异常,但意味着你在处理所有异常时都使用同一个逻辑去处理(这里说的逻辑即当前expect下面跟的代码块) Exception