DAY15 异常捕获

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 关闭文件问题
  • 文件关闭原则:文件操作完成后及时关闭

  • 文件自动关闭问题:

    1. 程序结束后文件会自动关闭
    2. 给保存文件对象的变量重新赋值的时候会自动关闭
    3. 不保存文件对象,文件会自动关闭
    4. 使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值