dtcms 模板下载 一帧数据 IntelliJ IDEA教程 数据结构 分库查询 微信直播 sorting javafx nuget Semantic UI vue最新版本 vue网站 vue标签 系统后台模板 郑州网站开发 外卖系统源码 jquery遍历对象 spark数据清洗 oracle添加索引 cad正在执行命令 flutter ui构建工具 python数据类型 python正则提取字符串 安装python教程 python课程 python指令 python的文件操作 python加入环境变量 java获取当前月 java环境部署 java连接mysql数据库 java时间戳转日期 java命令 python视频教程 零基础学python ps怎么插入表格 隐藏进程 hexworkshop 服务器系统安装 千千静听老版本
当前位置: 首页 > 学习教程  > python

Python自学4(错误处理和异常机制)

2021/2/7 11:06:09 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

" 如果不得不总是怀着会与人关系破裂的不安以及揣着无法启齿的秘密而活着、心灵不会腐蚀掉吗 ? " 知错能改—错误处理、异常机制1、如何处理错误2、捕获异常2.1、try - except 语句捕获异常2.2、捕获指定的异常2.3、捕获指定的多个异常2.4、try - except - finally …

在这里插入图片描述
" 如果不得不总是怀着会与人关系破裂的不安以及揣着无法启齿的秘密而活着、心灵不会腐蚀掉吗 ? "

知错能改—错误处理、异常机制

  • 1、如何处理错误
  • 2、捕获异常
    • 2.1、try - except 语句捕获异常
    • 2.2、捕获指定的异常
    • 2.3、捕获指定的多个异常
    • 2.4、try - except - finally 语句
  • 3、常见的异常类型
  • 4、raise 语句主动抛出异常
  • 5、总结
    • 5.1、try-except 语句
    • 5.2、finally 语句
    • 5.3、raise 语句

前言

  1. 我们之前写的代码能够正常运行是建立在一个前提之下的
  2. 那就是假设所有的命令行输入或者函数参数都是正确无误的
  3. 并且执行过程中每个环节都是可靠和符合预期的

错误内容

  1. 用户与程序交互时输入不满足规则的内容
  2. 如本应该输入年龄的地方输入了一个汉字、或者年龄的取值为负数
  3. 函数或模块的使用者采用非预期的使用方式
  4. 如函数期望的参数是整数型、结果传递了一个列表
  5. 程序外部的环境发生变化等
  6. 如读取文件时、系统中不存在该文件、网络传输时、发生连接故障

错误发生

  1. 发生在程序运行阶段、无法在编码阶段预知到它们是否会发生
  2. 但我们可以未雨绸缪、在代码中对潜在错误做出处理
  3. 以避免对程序运行造成破坏性影响

1、如何处理错误

  1. 首先错误发生时、需要先捕获到该错误
  2. 然后根据具体的错误内容或类型、选择后续处理的方式
  3. 在 Python 中大多数情况下、错误是以抛出异常的形式报告出来
  4. 如列表的索引越界异常
a = [1,2,3,4,5]
print(a[5])

# output:IndexError(错误): list index out of range(索引越界)
# 上面提示发生了「IndexError」错误,这个 IndexError 就是异常的一种、在这里它直接被解释器捕捉到、然后将错误信息输出到了命令行中

2、捕获异常

2.1、try - except 语句捕获异常

  1. 执行流程
  2. 从 try 下的 代码块1 开始执行
  3. 若其中有异常抛出、那么异常将会被捕获
  4. 直接跳转并执行 except 下的 代码块2
  5. 若 代码块1 一切正常、并没有异常抛出、那么 代码块2 将不会被执行
  6. 也就是说 代码块1 是我们想要正常运行的代码
  7. 代码块2 是当错误发生时用于处理错误的代码
# 语法
try:
    代码块1
except:
    代码块2

%1 有异常
try:
    a = [1,2][2]
    print(a)
except:
    print('列表索引越界啦')
# output:列表索引越界啦

%2 无异常
try:
    a = [1,2,3][2]
    print(a)
except:
    print('列表索引越界啦')
# output:3

2.2、捕获指定的异常

  1. 和之前的区别在于、多出了 异常X as e 这一部分
  2. 异常 X 是指定的要捕获的异常名、如 IndexError、NameError
  3. as e 语句是将异常对象赋予变量 e
  4. 这样 e 就可以在 代码块2 中使用了
  5. 如获取错误信息
# 语法
try:
    代码块1
except 异常X as e:
    代码块2

%1
try:
    a = [1,2][2]
    print(a)
except IndexError as e:
     print('出现索引越界错误:', e)
# output:出现索引越界错误: list index out of range

2.3、捕获指定的多个异常

  1. 第一种方式将多个异常放在一个 except 下处理
  2. 第一种方式适用于多种异常可用相同代码进行处理的情况。
  3. 第二种方式将多个异常分别放在不同的 except 下处理
  4. 第二种情况适用于每个异常需要用不同代码进行处理的情况
  5. 无论用哪种方式、异常抛出时
  6. Python 会根据异常类型去匹配对应的 except 语句
  7. 然后执行其中代码块
  8. 若异常类型未能匹配到、则异常会继续抛出
# 语法
%1 第一种情况
try:
    代码块1
except (异常X, 异常Y, 异常Z) as e:
    代码块2

%2 第二种情况
try:
    代码块1
except 异常X as e:
    代码块2
except 异常Y as e:
    代码块3
except 异常Z as e:
    代码块4

2.4、try - except - finally 语句

  1. 首先执行 代码块1
  2. 若发生异常则执行 代码块2、否则跳过 代码块2
  3. 无论是否发生异常都执行 代码块3
  4. 也就是说在 try-except 执行流程的基础上
  5. 紧接着执行 finally 下的代码块、且 finally 下的代码必定会被执行
  6. finally 作用
  7. 我们有时会在 try 下使用一些资源(比如文件、网络连接)
  8. 而无论过程中是否有异常产生
  9. 最后都应该释放(归还)掉这些资源、这时就可以将释放资源的代码放在 finally 语句下
# 语法
try:
    代码块1
except 异常X as e:
    代码块2
finally:
    代码块3

3、常见的异常类型

异常名含义
Exception大多数异常的基类
SyntaxError无效语法
NameError名字(变量、函数、类等)不存在
ValueError不合适的值
IndexError索引超过范围
ImportError模块不存在
IOErrorI/O 相关错误
TypeError不合适的类型
AttributeError属性不存在
KeyError字典的键值不存在
ZeroDivisionError除法中被除数为 0

4、raise 语句主动抛出异常

# 主动抛出异常的方法是使用 raise 语句
raise ValueError()
# 也可以同时指明错误原因
raise ValueError("输入值不符合要求")

实例

def stage_of_life(age):
    if age < 0 or age > 150:
        raise ValueError("年龄的取值不符合实际,需要在 0 到 150 之间")
    
    if age <= 6:
        return '童年'
    elif 7 <= age <=17:
        return '少年'
    elif 18 <= age <= 40:
        return '青年'
    elif 41 <= age <= 65: 
        return '中年'
    else:
        return '老年'

print(stage_of_life(155))
# output: ValueError: 年龄的取值不符合实际,需要在 0 到 150 之间

5、总结

5.1、try-except 语句

  • 捕获异常
try:
    代码块1
except 异常X as e:
    代码块2
  • 捕获多个异常
%1 第一种方法
try:
    代码块1
except (异常X, 异常Y, 异常Z) as e:
    代码块2

%2 第二种方法
try:
    代码块1
except 异常X as e:
    代码块2
except 异常Y as e:
    代码块3
except 异常Z as e:
    代码块4

5.2、finally 语句

  • finally 语句紧接着 try-except 的流程执行
try:
    代码块1
except 异常X as e:
    代码块2
finally:
    代码块3

5.3、raise 语句

  • 使用 raise 语句可主动抛出异常
raise ValueError()

本文链接: http://www.dtmao.cc/news_show_2000243.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?