一、简介
在实际的工作过程中,我们会遇到各种问题,比如文件不存在,代码运行不符合某些特定逻辑等,程序在运行时,遇到这些问题便会发生异常。英文是Exception。
a = float(input('请输入一个数字:'))
b = float(input('请输入另一个数字:'))
c = a/b
print(c)
在上面的这个程序中,要求我们输入数字,但当我们输入了字符时,不符合代码运行规则,因此出现错误。
二、异常处理
使用try…except来处理异常。我们把语句放在try模块中,把错误处理语句放在except 中。
也可以使用多个except,如try…except…except…
try: a = float(input('请输入一个数字:')) b = float(input('请输入另一个数字:')) c = a / b print(c) except ValueError: print('输入必须为数字') except ZeroDivisionError: print('除数不能为0')
使用异常后,输入错误时则执行相应的异常部分的程序块
三、try….finally结构
在程序执行的过程中,有的程序块无论是否发生异常,我们都希望它能够执行,这时就引入了finally结构。在finally结构后面的程序便是能够执行的程序。通常用来释放try中申请的资源。
try: w = open('C:/love.txt','r') #打开文件love.txt,模式为r,表示不存在则报错 text = w.readline() #读取一行的数据 print(text) except : #发生异常执行 print('文件未找到') finally: print('执行完毕') try: #文件不存在,关闭会产生异常 w.close() except BaseException as a: #打印异常产生的原因 print(a)
执行结果:
四、with 语句
Finally块由于是否发生异常都会执行,所以通常用于释放资源的代码,with语句也可以轻松的实现这种功能。
with上下文管理可以自动管理资源,在with模块中,无论是否发生异常,总能保证资源的释放。
with open(‘F:/sum.txt’, “r”) as f:
content = f.readline()
print(content)
print(‘执行完毕,恢复进入代码之前的状态’)
该程序表示打开F盘的sum.txt文件,读写模式为只读(r)模式。读完之后程序会自动关闭。
执行结果:
按时符文工房
执行完毕,恢复进入代码之前的状态
五、traceback模块
捕获并打印异常
import traceback try: print('开始') a = 10/0 except: traceback.print_exc()
运行结果:
import traceback try: print('开始') a = 10/0 except: with open('F:/sum.txt', 'a') as f: traceback.print_exc(file=f)
该程序表示如果发生异常时,打开F盘的sum文件,读写模式为a(只能写,表示文件不存在则创建该文件)。把异常写入文件中。
输出结果:
Sum文件中: