[oeasy]python066_如何捕获多个异常_try_否则_else_exception

简介: 本文介绍了Python中`try...except...else`结构的使用方法。主要内容包括:1. **回顾上次内容**:简要复习了`try`和`except`的基本用法,强调了异常处理的重要性。2. **详细解释**: - `try`块用于尝试执行代码,一旦发现错误会立即终止并跳转到`except`块。 - `except`块用于捕获特定类型的异常,并进行相应的处理。 - `else`块在没有异常时执行,是可选的。3. **示例代码**:通过具体例子展示了如何捕获不同类型的异常(如`ValueError`和`ZeroDivisionError`),并解释了异常处理

如何捕获多个异常_try_否则_else_exception

回忆上次内容

  • 上次学习了
  • try
  • except
  • try着  尝试着 运行
  • 一旦发现了 错误
  • 就 终止 try中的执行
  • 直接跳转到
  • except块

  • 注意要点
  1. 半角冒号
  2. 缩进
  3. 错误信息输出
  • 有错 就报
  • 不要 忽略、隐瞒
  • 否则 找不到 出错位置
  • 究竟 应该如何理解
  • try...except...呢?🤔

查询帮助

help("try")

  • 细节

  • try...
  • except...
  • 之后 还可以跟一个
  • else...

先回忆try

  • 如果try中
  • 发现了异常
  • 就立刻 从发现错误的 位置
  • 跳出来
  • 执行except 部分

后else

  • else 是一个可选(optional)子句

  • 如果try中
  • 从始至终没有发现异常
  • 在执行完try中的所有内容 之后
  • 运行 else 部分

举个例子

  • 这里的参数"abc"
  • 是无法转化为整型数字的
  • 会抛出ValueError
  • 跳出try子句

try:

   i = int("abc")

except ValueError:

   print("Exception is found!")

else:

   print("Nothing Wrong")

  • 进入except子句
  • 输出 发现异常

  • 然后跳过else子句
  • 那什么时候
  • 进入else子句呢?

例子更新

  • 将int函数的参数
  • abc修改为123

try:

   i = int("123")

except ValueError:

   print("Exception is found!")

else:

   print("Nothing Wrong")

  • 字符串"123"
  • 是 可以转化为整型数字的
  • 整个try部分
  • 都执行完毕
  • 没有抛出任何异常
  • 跳过
  • except子句
  • 直接进入
  • else子句
  • 执行输出 Nothing Wrong!

  • else的意思是否则
  • 是没发现异常时 才执行的
  • 具体都有 什么类型的 异常呢?

不同类型的error

  • 比如 下图
  • 就是 除数不能为零的 错误
  • ZeroDivisionError
  • 命名惯例 为 帕斯卡(大驼峰)
  • PascalCase Naming Convention

  • 如果不try
  • 会抛出ZeroDivisionError
  • 如果try了
  • 但没有捕捉这个错误呢?

没捉到

try:

   i = int("123")

   j = i / 0

except ValueError:

   print("Exception is found!")

else:

   print("Nothing Wrong")

  • 有错误
  • 但是 抓的方法不对

  • 怎么 捕获这个错误?

尝试捕获

  • except 不同的 Error
  • 会 捕获到 不同类型的 错误
  • 进行 不同 方式的 处理

try:

   i = int("123")

   j = i / 0

   print("this line never excute! ")

except ValueError:

   print(ValueError)

except ZeroDivisionError:

   print(ZeroDivisionError)

else:

   print("Nothing Wrong")

  • 尝试捕获 前两种类型的Error
  • ValueError
  • ZeroDivisionError

  • 各报各的错

尝试调试

  • 调试当前文件

:w|!pdb3 %

  • 第2行 运行没有毛病

  • 执行第3句的时候
  • 抛出除数不能为零错误
  • 进行 错误排查

错误判断

  • 根据 错误类型 排查

  • j = i / 0
  • 错误类型为 除数不能为零
  • ZeroDivisionError
  • 第4行 except ValueError
  • 类型不对
  • 跳过

继续错误判断

  • 第6行 except ZeroDivisionError
  • 类型正确
  • 进入子句

短路作用

  • 前面的异常处理
  • 会短路后面的异常处理
  • 只处理一次就行了

  • 为什么 要弄这么多
  • 错误排查 呢?
  • 没事找事 吗??

异常处理

  • 异常 随时 可能发生
想要 结果
打开 文件 文件不存在
访问 网址 服务器断网
读写 数据库 服务器关闭

  • 预测 可能出现的异常
  • 并且 有预案 进行处理
  • 运行时 才能 安稳放心
  • 如果 没有相应的 预案
  • 会如何呢?

没有捕获到指定的错误

  • 上来就找不到a
  • 抛出NameError

try:

   a

   i = int("123")

   j = i / 0

except ValueError:

   print(ValueError)

except ZeroDivisionError:

   print(ZeroDivisionError)

else:

   print("Nothing Wrong")

  • 给定的两种 Error类型
  • 都处理不了 NameError
  • 遍历了 所有处理方式之后
  • Error 依然 无法处理

兜底

  • 最后 都处理不了
  • 相当于 没处理
  • 把 NameError 上交
  • 抛给系统
  • 告知用户

  • 通用错误类型 吗?
  • 兜住 所有错误 那种?

总结

  • 我们了解了 try 的细节
  • try
  • 尝试运行
  • except
  • 发现异常时运行的代码块
  • else
  • 没有发现异常时运行的代码块
  • 注意!
  • 都要有英文半角的冒号
  • 子句都要通过 4 个字符的缩进控制范围

  • 错误类型太多了
  • 通用错误类型 吗?
  • 能兜住 所有错误 那种?
相关文章
|
8月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
953 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
7月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
262 97
|
7月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
241 62
|
6月前
|
人工智能 C# Python
处理python异常
本文介绍了Python中的异常处理机制,并实现了一个简单的异常装饰器。通过`try/except`语句捕获异常,结合`finally`子句完成清理工作。为进一步优化代码结构,文章提出了使用装饰器处理异常的方法,避免函数中大量冗长的异常处理语句。通过类封装异常装饰器,多个函数可共享异常处理逻辑,提升代码简洁性和可维护性。总结强调了装饰器在异常处理中的优势,使代码更加优雅高效。
161 27
|
6月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
406 8
|
7月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
200 20
|
8月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
248 29
|
7月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
164 17
|
7月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
212 12
|
7月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
153 2

推荐镜像

更多