[oeasy]python0139_尝试捕获异常_ try_except_traceback
尝试捕获异常
回忆上次内容
变量相加
整型数字变量可以相加
字符串变量也可以拼接
但是
字符串 和 整型数字
整型数字 和 字符串
不能相加
怎么办?
int("1")
str(2)
转格式
可是
int("abc")会发生什么??😱
字符串"abc"
如果输入的苹果数量是
先试试看
虽然我有了心理准备
但是 python 显然还没有准备好

要让 python 知道
什么时候可能会出错
简化问题
python3 的意思是
不知道怎么把
abc
转化为十进制数不但 python3 没有办法转化
我也没有思路

有的时候数字中确实可以有
abc
的比如
0xa
这种形式这
0xabc
是可以转化为数字的如何进行区分呢
而
abc
是不能转化的
思路
尝试
转化的工作出现在倒数第二行
total = int(a) + int(b)
需要做的
是
试
着 运行这一行
既然 给了用户输入的 权利
就要处理 用户输入的错误
如果遇到了 不能转化的情况
给用户 一个 明确的报错
就要处理
怎么才能让 python3 试着运行呢?
搜索 try
搜索一下 python3 + try

try
try 就是 试着来

把需要试着来的代码部分放到 try 里面
试着 成功了
就继续运行 try里面的代码
直到完成 try中所有的代码
试着 失败了
就跳转到except部分 执行
这就是
异常的处理
试着来
下面的源代码
转义成一个反斜杠
\
可以直接复制
系统会将两个反斜杠
\\
注意
待尝试的内容需要缩进 4 个字符
total = int(a) + int(b)
所有需要try的内容都要
就像while True中需要循环的循环体
缩进距离不多不少
缩进
需要缩进一样
4个就很合适
是英文半角的
要紧跟着 try、except
冒号
缩进
尝试运行
运行失败了
成功报了错

原来想的是 试着执行这句
total = int(a) + int(b)
可是这句 里面
不但进行 类型转化
还声明了 一个变量 total
这个total
由于int("a") 会出现错误
根本没有被声明
而且 后面还要被引用
后面引用不到
所以报错了
没 try成功
怎么办?
再次修正
都放 try 里面
尝试
试试行不行

这次终于成功地报错了!
或者说我接管了相关的报错信息
对于这类错有了自己的处理
这就是捕获了异常
并且处理了异常
红颜色的 error 好扎眼
我把他瞒下来
不报错可以么?
不报错
#!/usr/bin/pythona = input("How many apples do you got?\\n")print("You got " + a + " apples!") b = input("How many bananas do you got?\\n")print("You got " + b + " bananas!")try: total = int(a) + int(b) print("You got " + str(total) + " fruits!")except: pass
<font style="color:red;font-size:48px;">这不行!!!😡</font>
异常错误不处理不行
要明确得处理
要明确的报错
知道哪里错了
才好修改
如果假装没犯错
就会完全没有处理线索
程序大了绝对让人彻底崩溃
对应禅语
错误不应被悄悄传递
除非你确定需要这样做

精准地捕获异常
不写 except:pass 风格的代码
那什么是 except:pass 风格的代码呢?
异常飘过
就是 那种
知错不报错
的方式虽然 except接收到了错误
但是 轻轻飘过pass

上面这是错的!
这是最要命的
让人没有追踪trace的痕迹
无法调试debug!
无语问苍天😭!
不但要有自己的报错
还要保留系统的报错
有可能吗?
保留报错

最终结果

可以让报错详细一些吗?
比如文件、行号
保留报错细节

import traceback
traceback.print_exc()

总结
这次学习了
try
except
注意要点
半角冒号
缩进
错误信息输出
有错就处理
系统报错信息原样输出
不要忽略、隐瞒
否则找不到出错位置
还可以用traceback把
但是代码量好多啊
10多 行了 🤯
可以把他输入部分和输出部分么?🤔
我们下次再说!👋
蓝桥->https://www.lanqiao.cn/courses/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython