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

overmind1980 2025-02-21 14:23:38

异常处理之后做些什么_try语句的完全体_最终_finally 回忆上次内容

我们了解了 try 的细节

except 可以 捕获到异常

但报错比较简单

添加图片注释,不超过 140 字(可选)

游乐场里面的 报错

更全 更丰富

还告诉哪个文件、第几行

添加图片注释,不超过 140 字(可选)

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

添加图片注释,不超过 140 字(可选)

报错信息

可以输出完整的报错信息吗?

包含文件和行号那种的详细信息

添加图片注释,不超过 140 字(可选)

运行结果

添加图片注释,不超过 140 字(可选)

告诉了我们

t.py 第1行

发生了 NameError

询问ai

添加图片注释,不超过 140 字(可选)

修改

导入

trackback模块

获得 跟踪信息

import traceback try:     a except:     print("in except---------")     traceback.print_exc()     print("in except=========")

运行结果

不但保留了系统的报错

还把错误位置也指出了

添加图片注释,不超过 140 字(可选)

应该 如何理解 traceback中的

print_exc函数呢?

游乐场

traceback 是 模块(module)

import traceback

引入 这个模块(module)

添加图片注释,不超过 140 字(可选)

traceback.print_exc

.(点)的意思 是 里面的

traceback 里面的 print_exc

作用是输出异常信息

添加图片注释,不超过 140 字(可选)

try 语句当中

除了 except 和 else 之外

还有其他子句 吗?

finally

try 之后分支

要么 执行中 捕获到了异常

立即停止 try中的部分

跳入 对应的except 执行

要么 try全部执行完

也 没有捕获到异常

执行 else 子句

添加图片注释,不超过 140 字(可选)

无论是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...")

结果

添加图片注释,不超过 140 字(可选)

finally的帮助 help("try")

如果执行过程中

还有 任何的异常 没有被处理

那么就 把这个异常 临时存住

等finally执行之后

再抛出 这个异常

如果遇到return break continue之类 强制跳转语句

这个异常 就 被忽略了

添加图片注释,不超过 140 字(可选)

saved exception re-raised

这如何理解?

最后再抛异常 try:     a except ValueError:     print(ValueError) else:     print("Nothing Wrong") finally:     print("finally----------")

运行结果

添加图片注释,不超过 140 字(可选)

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最后抛出来

添加图片注释,不超过 140 字(可选)

这是finally的执行逻辑

最终 收尾

有什么实践中的例子吗?

应用场景

下图是

python连接数据库的类库

psycopg

添加图片注释,不超过 140 字(可选)

try的具体应用

如果都成功 就 提交(commit)

如果失败 就 回滚(rollback)

无论成功失败 最后都要 断开连接

finally 就像python 中的

Guido一样

最终决策

仁慈的独裁者BDFL

彻底的仁慈

意味着 没有主见和行动力下降

彻底的独裁

则会 失去广泛的帮助

添加图片注释,不超过 140 字(可选)

仁慈和独裁

像是 矛盾的两面

但是

Guido却 很好地 平衡了两者

除了 Guido之外

很多 开源项目的 老大

也有 类似的称号

添加图片注释,不超过 140 字(可选)

Guido是

如何成长的呢?

扩展视野

Guido 利用假期去

当时 it的 潮头

美国硅谷

做 一些WorkShop实践课程

推广python

添加图片注释,不超过 140 字(可选)

很早 接触到了

互联网的 发展趋势

互联网

Guido做了

一个浏览器grail

添加图片注释,不超过 140 字(可选)

网络集聚

网络的能量越来大

这 为python的发展 做了很好的准备

媒介

从报纸、杂志、电视

发展到邮件、论坛和浏览器

添加图片注释,不超过 140 字(可选)

有人 就有 应用

有应用 就更有 人

于是会形成 正反馈

有了社区 就会有更多的人 加入社区

其实学编程 也是一样

越熟练 就会越自信

越自信 也就会越熟练

Guido 作为 finally

人很多 之后

众说纷纭

往往需要

一个最终的决策

添加图片注释,不超过 140 字(可选)

finally

Guido 完成决策

决策并不是为了显示

自己权威的位置

所有者 的权限

那样会 让开发者远离 python项目

决策 是因为

Guido 比任何人 都更 了解项目

对于决策 都能做出 合理的解释

水瓶座出 生的Guido

注重 社群的力量

水瓶座时代

2023年

冥王星 将从摩羯座 进入 水瓶座

将迎来 20年左右的 转折窗口

我们人类社会 开始转变

添加图片注释,不超过 140 字(可选)

地球 迎来了 水瓶座时代

个人更着重于

自身内在精神灵性方面的 成长

不再执着于 外在物质欲望的 享受

水瓶座象征的是集体、群众和社区

意味着乐于喜悦服务他人

我们的 人际关系、生活方式 将发生重大变化

人类的集体意识会逐渐提升

可以更容易 连结智慧本源 以及 更高维度的世界

科学技术、人道主义及公正平等

模式创新、理想社会

将会是全球议题中的 重中之重

地球环境趋于恶化,气候多变

全球变暖,能源安全变得极为重要

人类应用高科技对空气、水以及土壤进一步改造会变得困难

并且加剧了 全球环境恶化

总结

我们了解了 try 的完全体

try

尝试运行

except

发现异常时运行的代码块

else

没有发现异常时运行的代码块

finally

无论是否发现异常最终都要运行的代码块

添加图片注释,不超过 140 字(可选)

为什么print函数

不用声明和导入?🤔

直接就能用呢?🤔

我们下次再说!👋

蓝桥->https://www.lanqiao.cn/courses/3584

github->https://github.com/overmind1980/oeasy-python-tutorial

gitee->https://gitee.com/overmind1980/oeasypython

0 阅读:0