[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多 行了 🤯
  • 可以把他输入部分和输出部分么?🤔



目录
相关文章
|
5天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
98 80
|
12天前
|
人工智能 C语言 Python
[oeasy]python051_什么样的变量名能用_标识符_identifier
本文介绍了Python中变量名的命名规则,强调标识符(identifier)必须以字母或下划线开始,后续可包含字母、下划线及数字。通过`isidentifier()`函数可验证字符串是否为合法标识符。文中还探讨了为何数字不能作为标识符的开头,并提供了相关练习与解答,最后提及这些规则源自C语言的影响。
107 69
|
14天前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
108 68
|
3天前
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
23 9
|
11天前
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
22 5
|
16天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
27 9
|
19天前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
27 5
|
27天前
|
存储 Python 容器
[oeasy]python045_[词根溯源]赋值_assignment_usage_使用
本文回顾了上一次讲解的内容,重点讨论了变量的概念及其在各种系统和游戏中的应用。文章详细解释了变量的声明与赋值操作,强调了赋值即为将具体值存储到变量名下的过程。同时,通过例子说明了字面量(如数字0)不能被赋值给其他值的原因。此外,还探讨了“赋值”一词的来源及其英文表达“assignment”的含义,并简要介绍了与之相关的英语词汇,如sign、assign、signal等。最后,总结了本次课程的核心内容,即赋值操作的定义和实现方式。
24 3
|
1月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError(&quot;Invalid input&quot;)`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
1月前
|
Python
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
在Python中,`try...except`语句用于捕获和处理程序运行时的异常
44 5