068_异常处理之后做些什么_finally
异常处理之后做些什么_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函数
-
不用声明和导入?🤔
-
直接就能用呢?🤔
-
我们下次再说!👋
-
蓝桥->AI 编程-oeasy 教您玩转 python_Python - 蓝桥云课
-
github->https://github.com/overmind1980/oeasy-python-tutorial
-
gitee->oeasy教您玩转python教程: 面向零基础初学者的简明易懂的 Python3 入门课程,对没有编程经验的同学也非常友好。在vim下从浅入深,逐步学习。从基础入门学习到爬虫。