欢迎光临散文网 会员登陆 & 注册

[oeasy]python0139_尝试捕获异常_ try_except_traceback

2023-04-24 19:47 作者:oeasy  | 我要投稿

- 不但要有自己的报错    - 还要保留系统的报错- 有可能吗?### 保留报错![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221029-1667047409821)- 最终结果![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221029-1667047424252)- 可以让报错详细一些吗?- 比如文件、行号### 保留报错细节![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221029-1667047853333)- import traceback    - traceback.print_exc()![图片描述](https://doc.shiyanlou.com/courses/uid1190679-20221029-1667047872197)## 总结- 这次学习了  - try  - except- 注意要点  - 半角冒号  - 缩进  - 错误信息输出- 有错就处理  - 不要忽略、隐瞒  - 否则找不到出错位置  - 还可以用traceback把    - 系统报错信息原样输出- 但是代码量好多啊  - 10多 行了 🤯  - 可以把他输入部分和输出部分么?🤔- 我们下次再说!👋- 蓝桥->https://www.lanqiao.cn/courses/3584- github->https://github.com/overmind1980/oeasy-python-tutorial- gitee->https://gitee.com/overmind1980/oeasypython

尝试捕获异常

回忆上次内容

  • 变量相加

    • 整型数字变量可以相加

    • 字符串变量也可以拼接

  • 但是

    • 字符串 和 整型数字

    • 整型数字 和 字符串

    • 不能相加

  • 怎么办?

    • int("1")

    • str(2)

    • 转格式

  • 可是

    • int("abc")会发生什么??😱

    • 字符串"abc"

    • 如果输入的苹果数量是

先试试看

  • 虽然我有了心理准备

    • 但是 python 显然还没有准备好

  • 要让 python 知道

    • 什么时候可能会出错

简化问题

  • python3 的意思是

    • 不知道怎么把 abc 转化为十进制数

  • 不但 python3 没有办法转化

    • 我也没有思路

  • 有的时候数字中确实可以有 abc

    • 比如 0xa 这种形式

  • 0xabc 是可以转化为数字的

    • 如何进行区分呢

    • abc 是不能转化的

思路

  • 尝试转化的工作

    • 出现在倒数第二行

    • total = int(a) + int(b)

  • 需要做的

    • 着 运行这一行

#!/usr/bin/python3a = input("How many apples do you have: ")print("You have got " + a + " apples!") b = input("How many banana do you have: ")print("You have got " + b + " bananas!") total = int(a) + int(b)print("You have got " + str(total) + " fruits in all!")
  • 既然 给了用户输入的 权利

    • 就要处理 用户输入的错误

  • 如果遇到了 不能转化的情况

    • 给用户 一个 明确的报错

    • 就要处理

  • 怎么才能让 python3 试着运行呢?

搜索 try

  • 搜索一下 python3 + try

try

  • try 就是 试着来

    • 把需要试着来的代码部分放到 try 里面

  • 试着 成功了

    • 就继续运行 try里面的代码

    • 直到完成 try中所有的代码

  • 试着 失败了

    • 就跳转到except部分 执行

  • 这就是

    • 异常的处理

试着来

  • 下面的源代码

    • 转义成一个反斜杠\

    • 可以直接复制

    • 系统会将两个反斜杠\\

#!/usr/bin/python3a = 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)except:    print("\\33[41m[error]\\33[0m -- input should be numbers!")print("You got " + str(total) + " fruits!")
  • 注意

    • 待尝试的内容需要缩进 4 个字符

    • total = int(a) + int(b)

    • 所有需要try的内容都要

    • 就像while True中需要循环的循环体

    • 缩进距离不多不少

    • 缩进

    • 需要缩进一样

    • 4个就很合适

    • 是英文半角的

    • 要紧跟着 try、except

    • 冒号

    • 缩进

尝试运行

  • 运行失败了

    • 成功报了错

  • 原来想的是 试着执行这句

    • total = int(a) + int(b)

  • 可是这句 里面

    • 不但进行 类型转化

    • 还声明了 一个变量 total

  • 这个total

    • 由于int("a") 会出现错误

    • 根本没有被声明

    • 而且 后面还要被引用

  • 后面引用不到

    • 所以报错了

    • 没 try成功

  • 怎么办?

再次修正

  • 都放 try 里面

#!/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:    print("\\33[41m[error]\\33[0m -- input should be numbers!")

尝试

  • 试试行不行

  • 这次终于成功地报错了!

    • 或者说我接管了相关的报错信息

    • 对于这类错有了自己的处理

    • 这就是捕获了异常

    • 并且处理了异常

  • 红颜色的 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



[oeasy]python0139_尝试捕获异常_ try_except_traceback的评论 (共 条)

分享到微博请遵守国家法律