- 不但要有自己的报错 - 还要保留系统的报错 - 有可能吗? ### 保留报错 ![图片描述](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多 行了 🤯
- 可以把他输入部分和输出部分么?🤔
- 我们下次再说!👋
- 蓝桥->https://www.lanqiao.cn/courses/3584
- github->https://github.com/overmind1980/oeasy-python-tutorial
- gitee->https://gitee.com/overmind1980/oeasypython