[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally

简介: 介绍了 Python 中 `try` 语句的完全体,包括 `try`、`except`、`else` 和 `finally` 子句的使用。通过实例展示了如何捕获异常并输出详细的错误信息,如文件名和行号。特别强调了 `finally` 子句的作用,无论是否发生异常,`finally` 都会执行,常用于清理操作。最后总结了 `try` 语句的四个部分及其应用场景,并简要提及了 Python 社区的决策机制。 #try #except #else #finally

异常处理之后做些什么_try语句的完全体_最终_finally

回忆上次内容

  • 我们了解了 try 的细节
  • except 可以 捕获到异常
  • 但报错比较简单

  • 游乐场里面的 报错
  • 更全 更丰富
  • 还告诉哪个文件、第几行

  • 可以跟踪到 最详细 报错信息 吗?🤔

报错信息

  • 可以输出完整的报错信息吗?
  • 包含文件和行号那种的详细信息

  • 运行结果

  • 告诉了我们
  • t.py 第1行
  • 发生了 NameError

询问ai

修改

  • 导入
  • trackback模块
  • 获得 跟踪信息

import traceback

try:

   a

except:

   print("in except---------")

   traceback.print_exc()

   print("in except=========")

  • 运行结果
  • 不但保留了系统的报错
  • 还把错误位置也指出了

  • 应该 如何理解 traceback中的
  • print_exc函数呢?

游乐场

  • traceback 是 模块(module)
  • import traceback
  • 引入 这个模块(module)

  • traceback.print_exc
  • .(点)的意思 是 里面的
  • traceback 里面的 print_exc
  • 作用是输出异常信息

  • try 语句当中
  • 除了 except 和 else 之外
  • 还有 其他子句 吗?

finally

  • try 之后分支
  • 要么 执行中 捕获到了异常
  • 立即停止 try中的部分
  • 跳入 对应的except 执行
  • 要么 try全部执行完
  • 也 没有捕获到异常
  • 执行 else 子句

  • 无论是except 还是 else
  • 最后 总要执行finally 子句

finally

  • finally
  • 是一个收尾的语句

import traceback


try:

   i = int("123")

   j = i / 0

except ValueError:

   print(ValueError)

except NameError:

   print(NameError)

except Exception as e:

   traceback.print_exc()

else:

   print("Nothing Wrong")

finally:

   print("At Last...finally...")

  • 结果

finally的帮助

help("try")

  • 如果执行过程中
  • 还有 任何的异常 没有被处理
  • 那么就 把这个异常 临时存住
  • 等finally执行之后
  • 再抛出 这个异常
  • 如果遇到return break continue之类 强制跳转语句
  • 这个异常 就 被忽略了

  • saved exception re-raised
  • 这如何理解?

最后再抛异常

try:

   a

except ValueError:

   print(ValueError)

else:

   print("Nothing Wrong")

finally:

   print("finally----------")

  • 运行结果

  • except 子句 处理不来 NameError
  • 把这个 Error 先存着
  • 跳过else
  • 进入finally
  • finally 执行后
  • 再把 这个Error
  • 直接 抛给 系统
  • 再看一个例子

理解finally

  • try里面
  • 第2行 出现错误 abc无法转化为整型变量
  • ValueError
  • 不执行后面的
  • d = i / 0
  • 直接 跳到except

try:

   i = int("abc")

   d = i / 0

except ZeroDivisionError:

   print(ZeroDivisionError)

else:

   print("Nothing Wrong")

finally:

   print("At last...")

  • except中
  • 处理不来 ValueError
  • 于是ValueError就存着
  • 由于出现了Error
  • 已经进入了except部分
  • 无法进入else
  • 最后进入finally执行
  • 输出了At Last
  • 执行完finally语句块
  • 才把这个ValueError最后抛出来

  • 这是finally的执行逻辑
  • 最终 收尾
  • 有什么实践中的例子吗?

应用场景

  • 下图是
  • python连接数据库的类库
  • psycopg

  • try的具体应用
  • 如果都成功 就 提交(commit)
  • 如果失败 就 回滚(rollback)
  • 无论成功失败 最后都要 断开连接
  • finally 就像python 中的
  • Guido一样
  • 最终决策

仁慈的独裁者BDFL

  • 彻底的仁慈
  • 意味着 没有主见和行动力下降
  • 彻底的独裁
  • 则会 失去广泛的帮助

  • 仁慈和独裁
  • 像是 矛盾的两面
  • 但是
  • Guido却 很好地 平衡了两者
  • 除了 Guido之外
  • 很多 开源项目的 老大
  • 也有 类似的称号

  • Guido是
  • 如何成长的呢?

扩展视野

  • Guido 利用假期去
  • 当时 it的 潮头
  • 美国硅谷
  • 做 一些WorkShop实践课程
  • 推广python

  • 很早 接触到了
  • 互联网的 发展趋势

互联网

  • Guido做了
  • 一个浏览器grail

网络集聚

  • 网络的能量越来大
  • 这 为python的发展 做了很好的准备
  • 媒介
  • 从报纸、杂志、电视
  • 发展到邮件、论坛和浏览器

  • 有人 就有 应用
  • 有应用 就更有 人
  • 于是会形成 正反馈
  • 有了社区 就会有更多的人 加入社区
  • 其实学编程 也是一样
  • 越熟练 就会越自信
  • 越自信 也就会越熟练

Guido 作为 finally

  • 人很多 之后
  • 众说纷纭
  • 往往需要
  • 一个最终的决策

  • finally
  • Guido 完成决策
  • 决策并不是为了显示
  • 自己权威的位置
  • 所有者 的权限
  • 那样会 让开发者远离 python项目
  • 决策 是因为
  • Guido 比任何人 都更 了解项目
  • 对于决策 都能做出 合理的解释
  • 水瓶座出 生的Guido
  • 注重 社群的力量

水瓶座时代

  • 2023年
  • 冥王星 将从摩羯座 进入 水瓶座
  • 将迎来 20年左右的 转折窗口
  • 我们人类社会 开始转变

  • 地球 迎来了 水瓶座时代
  1. 个人更着重于
  2. 自身内在精神灵性方面的 成长
  3. 不再执着于 外在物质欲望的 享受
  4. 水瓶座象征的是集体、群众和社区
  5. 意味着乐于喜悦服务他人
  6. 我们的 人际关系、生活方式 将发生重大变化
  7. 人类的集体意识会逐渐提升
  8. 可以更容易 连结智慧本源 以及 更高维度的世界
  9. 科学技术、人道主义及公正平等
  10. 模式创新、理想社会
  11. 将会是全球议题中的 重中之重
  12. 地球环境趋于恶化,气候多变
  13. 全球变暖,能源安全变得极为重要
  14. 人类应用高科技对空气、水以及土壤进一步改造会变得困难
  15. 并且加剧了 全球环境恶化

总结

  • 我们了解了 try 的完全体
  • try
  • 尝试运行
  • except
  • 发现异常时运行的代码块
  • else
  • 没有发现异常时运行的代码块
  • finally
  • 无论是否发现异常最终都要运行的代码块

  • 为什么print函数
  • 不用声明和导入?🤔
  • 直接就能用呢?🤔
相关文章
|
10月前
|
人工智能 Python
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
305 97
|
10月前
|
人工智能 Python
[oeasy]python089_列表_删除列表项_remove_列表长度_len
本文介绍了Python列表(list)的操作方法,重点讲解了`remove`方法的使用。通过实例演示如何删除列表中的元素,探讨了`ValueError`异常产生的原因,并分析了时间复杂度O(n)的概念。同时提及了`clear`方法清空列表的功能及`len`函数获取列表长度的用法。最后以购物清单为例,展示列表的实际应用场景,并预告快速生成列表的方法将在后续内容中介绍。
308 62
|
9月前
|
存储 索引 Python
[oeasy]python093_find方法_指数为负数_index_实际效果
本文介绍了Python中`find`方法与索引(index)的使用,包括负数索引的实际效果。回顾了`eval`函数的应用,并强调类名如`str`、`int`、`list`不可用作变量名以避免覆盖。通过示例解析了负数索引在字符串和列表中的作用,以及`index`方法的三个参数(value、start、stop)的用法。同时对比了`index`和`find`方法的区别:`index`找不到子串时抛出`ValueError`,而`find`返回-1。最后总结了正负索引的使用场景及两者的特性,提供了相关学习资源链接。
476 8
|
10月前
|
人工智能 索引 Python
[oeasy]python091_列表_索引_index_中括号_索引函数
本文介绍了Python中列表与字符串的索引及index函数用法。通过range生成列表,使用索引[]访问和修改列表元素,index函数查找元素位置。字符串支持索引访问但不可直接修改。还探讨了16进制数在Python中的表示方法,以及日期、月份等特殊字符的Unicode范围。最后总结了列表与字符串操作的区别,并预告后续内容,提供蓝桥云课、GitHub和Gitee链接供进一步学习。
264 20
|
11月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
342 29
|
10月前
|
Python
[oeasy]python086方法_method_函数_function_区别
本文详细解析了Python中方法(method)与函数(function)的区别。通过回顾列表操作如`append`,以及随机模块的使用,介绍了方法作为类的成员需要通过实例调用的特点。对比内建函数如`print`和`input`,它们无需对象即可直接调用。总结指出方法需基于对象调用且包含`self`参数,而函数独立存在无需`self`。最后提供了学习资源链接,方便进一步探索。
263 17
|
10月前
|
Python 容器
[oeasy]python090_列表_构造_范围_range_start_end_step_步长
本文介绍了Python中列表的生成方法,重点讲解了`range()`函数的使用。通过`range(start, stop, step)`可生成一系列整数,支持正负步长,但不支持小数参数。文章从基础的列表追加、直接赋值到复杂的应用场景(如生成等宽字体的月份列表),结合实例演示了`range()`的灵活性与实用性。最后总结了`range()`的关键特性:前闭后开、支持负数步长,并提供了进一步学习的资源链接。
320 12
|
11月前
|
数据采集 监控 Python
Python爬虫异常处理:自动跳过无效URL
Python爬虫异常处理:自动跳过无效URL
Python爬虫异常处理:自动跳过无效URL
|
10月前
|
索引 Python
[oeasy]python092_eval_衡量_转化为列表
本文探讨了 Python 中 `eval` 函数的用法及其与字符串和列表之间的转换关系。通过实例分析,展示了如何使用 `eval` 将字符串转化为对应的数据类型,例如将表示列表的字符串转回列表。同时,文章深入讲解了 `eval` 的工作机制,包括根据本地和全局变量对字符串进行计算的能力。此外,还提醒了命名变量时需避免覆盖内置类名(如 `str`、`int`、`list`)的重要性,以免影响程序正常运行。最后,简要提及字符串和列表索引中负数的应用,并为读者提供了进一步学习的资源链接。
229 2
|
10月前
|
人工智能 Python
[oeasy]python088_列表_清空列表_clear
本文介绍了Python中列表的清空方法`clear`。通过实例讲解了`clear`与将列表赋值为空列表的区别,前者会清空原列表内容,而后者创建新空列表,不影响原列表。文中以收银程序为例,展示了`clear`的实际应用场景,并通过地址观察解释了两者的机制差异。最后总结了相关术语如`list`、`append`、`clear`等,帮助理解列表操作及方法调用的概念。
257 5

推荐镜像

更多