- 不但要有自己的报错 - 还要保留系统的报错 - 有可能吗? ​ ### 保留报错 ​ ![图片描述](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多 行了
  • 可以把他输入部分和输出部分么?
 


[oeasy]python0139_尝试捕获异常_ try_except_traceback的更多相关文章

  1. PythonAdvanced

    PythonAdvanced function 函数 (要多使用函数,方便,少变量,好改错) 函数是可以重复执行的语句块,可以重复使用 作用: 1.用于封装语句块,提高代码的重用性 2.定义用户级别的 ...

  2. python-模块,异常,环境管理器

    模块 Module 什么是模块: 1.模块是一个包含有一系列数据,函数,类等组成的程序组 2.模块是一个文件,模块文件名通常以.py结尾 作用: 1.让一些相关数据,函数,类等有逻辑的组织在一起,使逻 ...

  3. Java-50个关键字

    关键字 (50个,包含2个保留字)和特殊值(3个)一.基本数据类型相关关键字(8个) 1.关键字介绍(1)byte:单字节类型(2)short:短整型(3)int:整型(4)long:长整型(5)ch ...

  4. C++学习39 异常处理入门(try和catch)

    编译器能够保证代码的语法是正确的,但是对逻辑错误和运行时错误却无能为力,例如除数为 0.内存分配失败.数组越界等.这些错误如果放任不管,系统就会执行默认的操作,终止程序运行,也就是我们常说的程序崩溃( ...

  5. android小细节

    1.资源包图片尽量控制在50k以内,否则可能读取失败 2.资源图片建议使用png格式,此格式在android系统上支持最好.对于jpeg和gif格式的图片,在android4.0以后版本,通过系统自缩 ...

  6. Sublime Text 2 - There are no packages available for installation

    解决Sublime Text 2 package Control 无法安装插件的问题 错误提示 here are no packages available for installation 问题解决 ...

  7. 异常处理&RandomAccessFile&节奏感

    异常处理 异常处理方面的知识,下面是学习中记的笔记: try尝试捕获异常 catch对捕获的异常进行处理 多个catch要注意的问题: 一.顺序问题,先小后大,也就是先子类后父类.因为当异常出现的时候 ...

  8. Swift5 语言指南(二十四) 泛型

    通用代码使您能够根据您定义的要求编写可以使用任何类型的灵活,可重用的函数和类型.您可以编写避免重复的代码,并以清晰,抽象的方式表达其意图. 泛型是Swift最强大的功能之一,Swift标准库的大部分内 ...

  9. Java 如何抛出异常、自定义异常、手动或主动抛出异常

    public static void main(String[] args) { try { throw new Exception("抛出异常"); } catch (Excep ...

  10. 1.6 C++异常处理(try和catch)

    参考: http://www.weixueyuan.net/view/6332.html 注意: throw 抛出异常,catch 捕获异常, try 尝试捕获异常.   在程序设计过程中,我们总是希 ...

随机推荐

  1. 鸿蒙HarmonyOS实战-Stage模型(开发卡片页面)

    一.开发卡片页面 HarmonyOS元服务卡片页面(Metaservice Card Page)是指在HarmonyOS系统中,用于展示元服务的页面界面.元服务是指一组提供特定功能或服务的组件,例如天 ...

  2. java stream 简单函数

    写在前面 本文为笔者学习的一些心得,如有问题,评论请轻喷 本文分为以下部分: 中间操作 终止操作 归纳 中间操作 对 list 进行操作,返回一个新的 list 主要函数 作用 filter 过滤操作 ...

  3. Android 13 - Media框架(3)- MediaPlayer生命周期

    关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节了解了MediaPlayer api的使用,这一节就我们将会了解MediaPlayer的生命周期与api使用细节. 1.MediaPlayer ...

  4. 设置 ASP.NET Core Web API 中响应数据的格式 AddNewtonsoftJson 使用NewtonsoftJson替换掉默认的System.Text.Json序列化组件

    #region 使用NewtonsoftJson替换掉默认的json序列化组件 .AddNewtonsoftJson(options => { 修改属性名称的序列化方式,首字母小写 //opti ...

  5. 一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)

    今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家. 本地创建一个WPF项目,此处我使用.NET ...

  6. C# 利用Autofac批量接口注入依赖【学习记录】

    背景: 本人在一位大佬的Colder框架中看到了这个接口注入,然后呢就想学习一下ioc思想与di设计模式.此写法给我的感觉就是 非常的 优雅 ,优雅永不过时.关于接口注入的概念和ioc和di具体是什么 ...

  7. jquery checkbox的全选和反选

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  8. 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

    2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...

  9. .NET5 ASP.NET CORE 发布到IIS 文件无法替换

    由于默认是:进程内托管.要在IIS里停止网站,才能替换文件. 建议解决方案是:进程外(out-of-process)托管 记事本修改项目的  .csproj 文件(或在VS上,选中web项目,右键-编 ...

  10. Bean Searcher v4.3.0 重大更新!

    往期阅读: 我这样写代码,比直接使用 MyBatis 效率提高了 100 倍 最近火起的 Bean Searcher 与 MyBatis Plus 倒底有啥区别? Bean Searcher v3.8 ...