DAY15 异常捕获
一. 文件操作细节问题
1.1 参数encoding
-
open(file, mode=‘r’, *, encoding=None)
-
encoding:设置文本文件的编码或者解码方法(将数据写入到文件之前会自动编码,读出来的时候会进行解码)
-
原则:编码对应的编码值和解码对应的编码值必须一致
-
常用编码值:utf-8(中文范围4e00~9fa5), gbk(中文范围8140~FEFE)(英文一样)
注意:以’b’的方式打开文件,不能设置encoding的值
-
f = open('files/test.txt', 'w', encoding='utf-8')
f.write('abc哈喽')
f = open('files/test.txt', encoding='gbk')
print(f.read()) # abc鍝堝柦
f = open('files/test.txt', encoding='utf-8')
print(f.read()) # abc哈喽
1.2 read - 读文件
-
文件对象.read() - 从读写位置开始读到文件结束(读整个文件内容)
文件对象.resdline() - 从读写位置开始读到一行结束(读一行) -
注意:随着读操作的进行,文件读写位置会不断的发生变化
将读写位置移动到文件开头 - 文件对象.seek(0)
f = open('files/test1.txt', encoding='utf-8')
result = f.read()
print(result)
# 将读写位置移动到文件开头
f.seek(0)
result = f.read()
print(result)
f.seek(0)
print(f.readline()) # 床前明月光
print('--------------------优雅转场,华丽分割-------------------')
f.seek(0)
print(f.readlines()) # ['床前明月光\n', '疑是地上霜\n', '举头望明月\n', '低头思故乡']
1.3 关闭文件问题
-
文件关闭原则:文件操作完成后及时关闭
-
文件自动关闭问题:
- 程序结束后文件会自动关闭
- 给保存文件对象的变量重新赋值的时候会自动关闭
- 不保存文件对象,文件会自动关闭
- 使用with打开文件:
with open() as 文件对象:
操作文件()
# f = open('./files/test.txt', 'a')
# f.write('abc')
# f.write('123')
# 自动关闭情况2
f = open('files/test1.txt', encoding='utf-8')
result = f.read()
print(result)
# 重新给f赋值的时候上次打开的文件会自动关闭
f = open('files/test1.txt')
# 自动关闭情况3
result = open('files/test1.txt').read()
# 自动关闭情况4
with open('files/test1.txt') as f:
print(f.read())
print(f.read())
二. 异常捕获
2.1 异常 - 错误(程序报错)
-
执行程序的过程中,如果程序出现异常,会导致整个程序崩溃结束运行(后面的其他代码不会执行)
-
异常类型:IndexError, TypeError, FileNotFindError, ValueError, KeyError
print('===========')
# print('abc'[10])
print('+++++++++++')
print('-----------')
2.2 异常捕获
-
让程序在出现异常的时候不报错,不崩溃,可以继续运行
-
什么时候需要捕获异常:
知道某段代码可能会出现异常,但是无能为力,或者这个异常是用户行为导致的,或者使用者导致的,但是还想在出现异常的时候程序不崩溃,就使用异常捕获
try:
print('===========')
print('abc'[10])
print('+++++++++++')
except:
print('有异常出现')
'''
===========
有异常出现
'''
语法1 - 捕获所有类型的异常
try:
代码段1(需要异常捕获的代码)
except:
代码段2(捕获到异常后会执行的代码)
先执行代码段1,如果执行过程中出现异常,就马上执行代码段2,然后在执行后续的其他语句;如果没有出现异常,就不执行代码段2直接执行后续的其他语句
# 语法1 - 捕获所有类型的异常
try:
age = int(input('请输入你的年龄:'))
print(age + 10)
except:
print('年龄输入有误')
语法2 - 捕获特定类型的异常
try:
代码段1(需要异常捕获的代码)
except 异常类型:
代码段2(捕获到异常后会执行的代码)
# 语法2 - 捕获特定类型的异常
try:
age = int(input('请输入你的年龄:'))
print(age + 10)
except ValueError:
print('年龄输入有误')
语法3 - 同时捕获多种异常,针对不同的异常做相同的处理
try:
代码段1(需要异常捕获的代码)
except (异常类型1, 异常类型2, 异常类型3,…):
代码段2(捕获到异常后会执行的代码)
语法4 - 同时捕获多种异常,针对不同的异常做不同的处理
try:
代码段1(需要异常捕获的代码)
except 异常类型1:
代码段11(捕获到异常后会执行的代码)
except 异常类型2:
代码段22
except 异常类型3:
代码段33