我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
try
可能出现异常的代码
# (这里不管会抛出多少个异常,从上往下检测,检测到一个就立即往下去匹配,不会多次检测)
except 要捕获的异常类别1 as 接收异常的形参1:
对这个异常进行处理1
except 要捕获的异常类别2 as 接收异常的形参2:
对这个异常进行处理2
.
.
.
except 要捕获的异常类别n as 接收异常的形参n:
对这个异常进行处理n
[else:
没出现异常时做的处理]
[finally
不管有没有出现异常,都会执行这一部分代码]
# except 要捕获的异常类别 as 接收异常的形参:
# 这一句在Python2.x版本中可以用","替换语句中的as
# 但是Python3.x版本不能再用",",只能使用as
try语句
没有捕获到异常,先执行try
代码段,再执行else
,最后执行finally
try语句
捕获到异常,先执行except
处理错误,再执行finally
Exception
# 写法一
try:
# 1 / 0
print(name)
except ZeroDivisionError as e:
print('出现除零异常', e)
except NameError as e:
print('出现名称异常', e)
else:
print('么有出现异常')
finally:
print('不管是否有异常,都执行')
# 写法二
try:
# 1 / 0
print(name)
except (ZeroDivisionError, NameError) as e:
# try部分捕获到的异常类型到这个元组里面进行循环查找
print('出现了异常', e)
else:
print('么有出现异常')
finally:
print('不管是否有异常,都执行')
# 写法三
# 写法二
try:
# 1 / 0
print(name)
except Exception as e:
print('出现了异常', e)
else:
print('么有出现异常')
finally:
print('不管是否有异常,都执行')
with 语句用于异常处理,封装了try…except…finally
编码范式,提高了易用性
作用
with open(file) as f
语句,不管是否抛出异常,都会自动执行f.close()
关闭文件语法
with context_expression [as target(s)]:
with-body
# context_expression # 上下文表达式
# with-body # 语句体
# 上下文表达式:要求必须要返回一个“上下文管理器”的表达式
# 上下文管理器:实现了“上下文协议”的对象
# 上下文协议:必须要实现`__enter__()`(进入)方法和`__exit__()`(退出)方法
执行流程
1、context_expression上下文表达式要返回一个上下文管理器对象
2、调用“上下文管理器”的__enter__()方法
3、如果写了as target语句,则把__enter__()方法的返回值赋值给target
4、执行 语句体
5、执行“上下文管理器”的__exit__()方法
with语句示例
示例前提解析
# 文件读取操作正常步骤
# 1、打开文件 f = open('xxxx.xx')
# 2、读取文件 f.readlines() ---> 如果这一行代码抛出异常,就会影响后续“文件关闭”操作的执行
# 3、关闭文件 f.close()
使用try...except
语句解决
try:
打开文件
读取文件
except Exception:
异常处理
finally:
关闭文件
try...except
语句解决写法过于繁琐,如果有几十个文件操作,就要写几十遍try...except
语句使用with
语句解决
with open(file) as f:
读取文件
# open(file) 是上下文表达式,会返回一个“上下文管理器”
# 执行“上下文管理器”的__enter__()方法
# 将__enter__()方法的返回值(文件对象)赋值给f
# 执行 读取文件 操作
# 执行“上下文管理器”的__exit__()方法(在__exit__()方法内封装了文件关闭操作)
with语句问题点
上述代码中并不能捕获异常也没有做异常处理,仅仅是做了自动的文件关闭操作
要捕获异常,就要给读取文件操作套上try语句
with open(file) as f:
try:
读取文件
except Exception:
print('捕获异常,异常处理')
要捕获异常,也可以通过自定义上下文管理器来捕获