【Python】异常 & 文件

异常的处理

  • 异常:程序运行过程中出现的错误。

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 就会跟着执行

异常传播的处理

  • 异常的传播:好比函数出现了异常,那调用函数的地方也会出错
  1. 当函数出错时,我们可以在调用处进行处理
def fun1():
    print('函数内的语句')
    print(出错的语句)

try:
    fun1()
except:
    print('这里出错了')

print('执行之后的代码')
# ---------- 输出 ----------
# 函数内的语句
# 这里出错了
# 执行之后的代码
  1. 当函数出错时,我们也可以在函数内进行处理
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'

读取文件

  1. 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个字
  1. 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'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JS.Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值