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

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




























- 不但要有自己的报错  - 还要保留系统的报错 - 有可能吗? ### 保留报错 ![图片描述](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)


  • 可是
  • 如果输入的苹果数量是
  • 字符串"abc"


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


先试试看

  • 虽然我有了心理准备
  • 但是 python 显然还没有准备好


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

  • 要让 python 知道
  • 什么时候可能会出错


简化问题

  • python3 的意思是
  • 不知道怎么把 abc 转化为十进制数


  • 不但 python3 没有办法转化
  • 我也没有思路


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

  • 有的时候数字中确实可以有 abc
  • 比如 0xa 这种形式


  • 0xabc 是可以转化为数字的
  • abc 是不能转化的
  • 如何进行区分呢



思路

  • 尝试转化的工作
  • 出现在倒数第二行
  • total = int(a) + int(b)


  • 需要做的
  • 着 运行这一行


#!/usr/bin/python3 a = 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

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

try

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

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


  • 试着 成功了
  • 就继续运行 try里面的代码
  • 直到完成 try中所有的代码


  • 试着 失败了
  • 就跳转到except部分 执行


  • 这就是
  • 异常的处理


试着来

  • 下面的源代码
  • 可以直接复制
  • 系统会将两个反斜杠\\
  • 转义成一个反斜杠\



#!/usr/bin/python3 a = 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!")

  • 注意
  • 冒号
  • 是英文半角的
  • 要紧跟着 try、except


  • 缩进
  • 待尝试的内容需要缩进 4 个字符
  • total = int(a) + int(b)
  • 所有需要try的内容都要
  • 缩进


  • 就像while True中需要循环的循环体
  • 需要缩进一样


  • 缩进距离不多不少
  • 4个就很合适




尝试运行

  • 运行失败了
  • 成功报了错


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

  • 原来想的是 试着执行这句
  • total = int(a) + int(b)


  • 可是这句 里面
  • 不但进行 类型转化
  • 还声明了 一个变量 total


  • 这个total
  • 由于int("a") 会出现错误
  • 根本没有被声明
  • 而且 后面还要被引用


  • 后面引用不到
  • 所以报错了
  • 没 try成功


  • 怎么办?

再次修正

  • 都放 try 里面

#!/usr/bin/python a = 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!") 尝试

  • 试试行不行

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

  • 这次终于成功地报错了!
  • 或者说我接管了相关的报错信息
  • 对于这类错有了自己的处理
  • 这就是捕获了异常
  • 并且处理了异常


  • 红颜色的 error 好扎眼
  • 我把他瞒下来
  • 不报错可以么?


不报错 #!/usr/bin/python a = 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

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

  • <font style="color:red;font-size:48px;">这不行!!!😡</font>
  • 异常错误不处理不行
  • 要明确得处理
  • 要明确的报错


  • 知道哪里错了
  • 才好修改


  • 如果假装没犯错
  • 就会完全没有处理线索
  • 程序大了绝对让人彻底崩溃


对应禅语

  • 错误不应被悄悄传递
  • 除非你确定需要这样做


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

  • 精准地捕获异常
  • 不写 except:pass 风格的代码
  • 那什么是 except:pass 风格的代码呢?


异常飘过

  • 就是 那种知错不报错的方式
  • 虽然 except接收到了错误
  • 但是 轻轻飘过pass


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

  • 上面这是错的!
  • 这是最要命的
  • 让人没有追踪trace的痕迹
  • 无法调试debug!
  • 无语问苍天😭!


  • 不但要有自己的报错
  • 还要保留系统的报错


  • 有可能吗?

保留报错

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

  • 最终结果

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

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

保留报错细节

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

  • import traceback
  • traceback.print_exc()


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

总结

  • 这次学习了
  • try
  • except


  • 注意要点
  • 半角冒号
  • 缩进
  • 错误信息输出


  • 有错就处理
  • 不要忽略、隐瞒
  • 否则找不到出错位置
  • 还可以用traceback把
  • 系统报错信息原样输出



  • 但是代码量好多啊
  • 10多 行了 🤯
  • 可以把他输入部分和输出部分么?🤔



目录
相关文章
|
3月前
|
Unix 编译器 Shell
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
本文回顾了计算机语言与操作系统的起源,探讨了早期 Unix 操作系统及其与 C 语言的相互促进发展。Unix 最初用汇编语言编写,运行在 PDP-7 上,后来 Thompson 和 Ritchie 开发了 C 语言及编译器,使 Unix 重写并成功编译。1974 年 Ritchie 发表论文,Unix 开始被学术界关注,并逐渐普及。伯克利分校也在此过程中发挥了重要作用,推动了 Unix 和 C 语言的广泛传播。
64 9
[oeasy]python0033_先有操作系统还是先有编程语言_c语言是怎么来的
|
2月前
|
存储 索引 Python
|
26天前
|
人工智能 Shell 开发工具
[oeasy]python0041_输出ASCII码表_英文字符编码_键盘字符_ISO_646
本文介绍了ASCII码表的生成与使用,包括英文字符、数字和符号的编码。通过Python代码遍历0到127的ASCII值,解决了找不到竖线符号的问题,并解释了ASCII码的固定映射关系及其重要性。文章还介绍了ASCII码的历史背景,以及它如何成为国际标准ISO 646。最后,通过安装`ascii`程序展示了完整的ASCII码表。
17 1
|
1月前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
32 4
|
2月前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
25 1
|
2月前
|
Python
Python生成器、装饰器、异常
【10月更文挑战第15天】
|
1月前
|
人工智能 开发工具 Python
[oeasy]python040_缩进几个字符好_输出所有键盘字符_循环遍历_indent
本文探讨了Python代码中的缩进问题。通过研究`range`函数和`for`循环,发现缩进对于代码块的执行至关重要。如果缩进不正确,程序会抛出`IndentationError`。文章还介绍了Python的PEP8规范,推荐使用4个空格进行缩进,并通过示例展示了如何使用Tab键实现标准缩进。最后,通过修改代码,输出了从0到122的字符及其对应的ASCII码值,但未能找到竖线符号(`|`)。文章在总结中提到,下次将继续探讨竖线符号的位置。
12 0
|
2月前
|
设计模式 安全 JavaScript
Python学习八:面向对象编程(下):异常、私有等
这篇文章详细介绍了Python面向对象编程中的私有属性、私有方法、异常处理及动态添加属性和方法等关键概念。
26 1
|
2月前
|
Python
[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助
本文回顾了Python中`ord()`和`chr()`函数的使用方法,强调了这两个函数互为逆运算:`ord()`通过字符找到对应的序号,`chr()`则通过序号找到对应的字符。文章详细解释了函数参数类型的重要性,即`ord()`需要字符串类型参数,而`chr()`需要整数类型参数。若参数类型错误,则会引发`TypeError`。此外,还介绍了如何使用`type()`函数查询参数类型,并通过示例展示了如何正确使用`ord()`和`chr()`进行转换。最后,强调了在函数调用时正确传递参数类型的重要性。
24 3
|
3月前
|
人工智能 数据可视化 搜索推荐
Python异常模块与包
Python异常模块与包