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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
性能测试 PTS,5000VUM额度
函数计算FC,每月15万CU 3个月
简介: 介绍了 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函数
  • 不用声明和导入?🤔
  • 直接就能用呢?🤔
目录
打赏
0
1
1
0
171
分享
相关文章
[oeasy]python082_变量部分总结_variable_summary
本文介绍了变量的定义、声明、赋值及删除操作,以及Python中的命名规则和常见数据类型。通过示例讲解了字符串与整型的基本用法、类型转换方法和加法运算的区别。此外,还涉及异常处理(try-except)、模块导入(如math和random)及随机数生成等内容。最后总结了实验要点,包括捕获异常、进制转化、变量类型及其相互转换,并简述了编程中AI辅助的应用策略,强调明确目标、分步实施和逐步巩固的重要性。更多资源可在蓝桥、GitHub和Gitee获取。
148 97
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
63 28
[oeasy]python080如何生成验证码_随机数字密码_真随机
本文介绍了如何生成随机验证码的过程,从简单的随机数字生成到包含数字、大小写字母及符号的复杂验证码。通过 Python 的 `random` 和 `string` 模块,逐步扩展字符集并确保结果满足特定要求(如包含各类字符)。同时探讨了随机数生成的本质,指出计算机中的“随机”实际上是基于算法和种子值的伪随机,并非真正的物理随机。最后总结了验证码的生成原理及其在实际应用中的意义,为读者揭开日常生活中验证码背后的编程逻辑。
40 8
[oeasy]python075_什么是_动态类型_静态类型_强类型_弱类型_编译_运行
本文探讨了编程语言中的动态类型与静态类型、强类型与弱类型的概念。通过实例分析,如Python允许变量类型动态变化(如`age`从整型变为字符串),而C语言一旦声明变量类型则不可更改,体现了动态与静态类型的差异。此外,文章还对比了强类型(如Python,不允许隐式类型转换)和弱类型(如JavaScript,支持自动类型转换)的特点。最后总结指出,Python属于动态类型、强类型语言,对初学者友好但需注意类型混淆,并预告下期内容及提供学习资源链接。
59 21
|
22天前
|
[oeasy]python076_int这个词怎么来的_[词根溯源]整数类型_int_integer_touch
本文探讨了“int”一词的起源及其与整数类型的关联。通过词根溯源,揭示“int”来源于“integer”,意为“完整的数”,与零碎的分数相对。同时分析了相关词汇如“tact”(接触)、“touch”(触摸)及衍生词,如“tangential”(切线的)、“intagible”(无形的)和“integral”(完整的、不可或缺的)。文章还结合编程语言特性,解释了Python作为动态类型、强类型语言的特点,并总结了整型变量的概念与意义。最后预告了后续内容,提供了学习资源链接。
49 11
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
36 1
|
25天前
|
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
33 4
|
1月前
|
[oeasy]python072_名字空间是怎么玩的_from_import_as_导入_namespace
本文介绍了Python中名字空间和模块导入的使用方法。主要内容包括: 1. **回忆上次内容**:回顾了之前导入系统模块(如`__hello__`、`time`)和自定义模块(如`my_file`),并介绍了如何导入和使用模块中的变量。 2. **从shell开始**:展示了如何在命令行中编辑和切换文件,以及如何通过`import`语句引入模块。 3. **修改oeasy.py**:演示了如何通过`import my_file`导入模块,并将模块中的`pi`赋值给本地变量`pi`。 4. **locals()函数**:解释了如何使用`locals()`查看当前作用域内的本地变量及其值。
35 8
|
29天前
|
[oeasy]python073_下划线在python里是什么含义_内部变量_私有变量_系统变量
本文回顾了Python中从模块导入变量和函数的方式,重点讨论了避免本地变量名冲突(local name clashes)的方法。通过`from module import variable as alias`可以为导入的变量重命名,防止冲突。根据PEP8规范,建议避免使用`from module import *`,因为它会导入模块中所有非下划线开头的变量,容易引发冲突。下划线在变量命名中有特殊含义:单个前导下划线表示内部变量,后置下划线用于避免与关键字冲突,双下划线前后包围表示系统变量。总结了下划线的不同用法及其作用。下次将继续探讨更实用的编程技巧。
35 3

云原生

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等