异常 & 文件
异常的处理
- 异常:程序运行过程中出现的错误。
try 语句
# 语法:
try:
代码块 (可能出现错误的语句)
except 异常类型 as 异常名:
代码块 (出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块 (出现错误以后的处理方式)
....
else:
代码块 (没出错时,就会执行该代码块)
finally:
代码块 (无论是否出错,该代码块都会执行)
- else、finally 可有可无
print('try 函数之前')
try:
print(可能出错的语句)
except:
print('出错进行处理')
print('try 函数之后')
# ---------- 输出 ----------
# try 函数之前
# 出错进行处理
# try 函数之后
- except 后面要跟着出错的类型,对应着出现该类错误时的纠正代码
def fun1():
print(1/0)
try:
fun1()
except NameError:
print('出现 NameError 的错误,开始纠正...')
except ZeroDivisionError:
print('出现 ZeroDivisionError 的错误,开始纠正...')
else:
print('没出错时,else 后的代码就会执行')
finally:
print('不管有没有错,try 执行后,finally 就会跟着执行')
# ---------- 输出 ----------
# 出现 ZeroDivisionError 的错误,开始纠正...
# 不管有没有错,try 执行后,finally 就会跟着执行
- 当你不知道出错的类型时,你可以用 Exception;可自动获取错误的情况
def fun1():
print(1/0)
try:
fun1()
except Exception as Error:
print(f'出现{type(Error)}类型的错误:{Error},开始纠正...')
else:
print('没出错时,else 后的代码就会执行')
finally:
print('不管有没有错,try 执行后,finally 就会跟着执行')
# ---------- 输出 ----------
# 出现<class 'ZeroDivisionError'>类型的错误:division by zero,开始纠正...
# 不管有没有错,try 执行后,finally 就会跟着执行
异常传播的处理
- 异常的传播:好比函数出现了异常,那调用函数的地方也会出错
- 当函数出错时,我们可以在调用处进行处理
def fun1():
print('函数内的语句')
print(出错的语句)
try:
fun1()
except:
print('这里出错了')
print('执行之后的代码')
# ---------- 输出 ----------
# 函数内的语句
# 这里出错了
# 执行之后的代码
- 当函数出错时,我们也可以在函数内进行处理
def fun1():
print('函数内的语句')
try:
print(出错的语句)
except:
print('这里出错了')
fun1()
print('执行之后的代码')
# ---------- 输出 ----------
# 函数内的语句
# 这里出错了
# 执行之后的代码
文件的操作
- 文件,又叫 I / O ( Input / Output );我们可以通过 python 对文件进行操作
- 文件操作的步骤:打开文件 - - - 对文件进行操作 - - - 关闭文件
- 文件类型:① 纯文本文件(使用 utf-8 编码的文件);② 二进制文件(图片、MP3、视频…)
纯文本文件
打开文件
- open ( 路径, 属性, 编码格式 ) 函数
① 路径:绝对路径 / 相对路径;② 属性:默认 ’ r ‘、’ w ‘、’ a ‘、’ rb ‘、’ wb '… ③ 编码格式:encoding 默认为 None,utf - 8… - open 打开的文件默认是只读文件。如果需要重新编辑内容,可以传入 ’ w ’ 参数;如果需要添加内容,可以传入 ’ a ’ 参数。
file1 = open('../homework - 09/demo.txt')
print(type(file1))
print(file1)
# ---------- 输出 ----------
# <class '_io.TextIOWrapper'>
# <_io.TextIOWrapper name='../homework - 09/demo.txt' mode='r' encoding='cp936'>
- 若需要打开中文文件,需要给 open 设置 encoding 属性为 utf-8
with open('../homework - 09/demo.txt', encoding='utf-8') as file1:
关闭文件
操作完文件后,我们就要关闭文件,以免文件一直占用着电脑的内存
- close ( ) 函数
file1 = open('../homework - 09/demo.txt')
file1.close()
with open ( ) as XXX
- 这个语句会在我们操作完文件后自动关闭文件
with open('../homework - 09/demo.txt') as file1:
print('获取文件,进行操作')
print('离开语句,文件自动关闭')
- 我们在文件获取时,可能会出现错误,我们可以结合 try 语句使用
try:
with open('demo.txt') as file1:
print('获取文件,进行操作')
except Exception as Error:
print(Error)
# ---------- 输出 ----------
# [Errno 2] No such file or directory: 'demo.txt'
读取文件
- read ( size ) 函数
① size:设置每次读取的字符数,用于控制读取的文件大小;默认是 -1,即全部读取。
with open('../homework - 09/demo.txt') as file1:
print(file1.read())
# ---------- 输出 ----------
# 文件 demo.txt 的内容(内容必须是英文的)
with open('../homework - 09/demo.txt', encoding='utf-8') as file1:
print(file1.read(5), end=';')
print(file1.read(5))
# ---------- 输出 ----------
# 1~5个字;6~10个字
- readline ( ) 函数
with open('../homework - 09/demo.txt', encoding='utf-8') as file1:
print(file1.readline())
print(file1.readline())
# ---------- 输出 ----------
# 第一行的内容
# 第二行的内容
写入内容
- write ( ) 函数
- 因为 open 默认打开只读文件,所以我们需要传入 ’ w ’ 参数或者 ’ a ’ 参数
open 传入 ’ w ’ 参数
- 如果文件不存在,会创建文件
- 如果文件存在,写入的内容会覆盖原来的内容
with open('../homework - 09/demo.txt', 'w', encoding='utf-8') as file1:
file1.write('写入的内容1。')
file1.write('写入的内容2。')
with open('../homework - 09/demo.txt', encoding='utf-8') as file2:
print(file2.read())
# ---------- 输出 ----------
# 写入的内容1。写入的内容2。
- 每打开一次文件,写入的内容都会覆盖文件中上一次写入的内容
with open('../homework - 09/demo.txt', 'w', encoding='utf-8') as file1:
file1.write('写入的内容1。')
file1.write('写入的内容2。')
with open('../homework - 09/demo.txt', 'w', encoding='utf-8') as file2:
file2.write('第二次打开写入的内容1。')
file2.write('第二次打开写入的内容2。')
with open('../homework - 09/demo.txt', encoding='utf-8') as file3:
print(file3.read())
# ---------- 输出 ----------
# 第二次打开写入的内容1。第二次打开写入的内容2。
open 传入 ’ a ’ 参数
with open('../homework - 09/demo.txt', 'w', encoding='utf-8') as file1:
file1.write('写入的内容1。')
file1.write('写入的内容2。')
with open('../homework - 09/demo.txt', 'a', encoding='utf-8') as file3:
file3.write('添加的内容')
with open('../homework - 09/demo.txt', encoding='utf-8') as file4:
print(file4.read())
# ---------- 输出 ----------
# 写入的内容1。写入的内容2。添加的内容
二进制文件
- read 的属性 size 的单位是字节
读取文件
- open 设置 ’ rb ’ 属性;
with open(r'E:\123.mp4', 'rb') as file1:
print(file1.read(10))
# ---------- 输出 ----------
# b'\x96\xf4D"\xbf>\x1b|\xe7\xeb'
写入内容
- open 设置 ’ wb ’ 属性;写入的必须是二进制格式的内容
with open(r'E:\123.mp4', 'wb') as file1:
file1.write(b'123')
with open(r'E:\123.mp4', 'rb') as file1:
print(file1.read())
# ---------- 输出 ----------
# b'123'