Skip to content

Latest commit

 

History

History
206 lines (143 loc) · 4.28 KB

051-1346316-try_试着来_except_发现异常.sy.md

File metadata and controls

206 lines (143 loc) · 4.28 KB
show version enable_checker
step
1.0
true

try_尝试使用异常

回忆上次内容

  • 上次回顾了
    • shell环境
    • python3游乐场
    • vim编辑器
    • 以及他们之间的切换

图片描述

  • 准备去编辑一个有趣的程序

编辑文件

  • 继续之前程序
    • 试图将苹果数量转化为整数(int)类型
a = input("How many apples do you have:")
weight = a * 2
print("You have ",weight, "kg apples.")
  • 尝试运行

结果

  • 尝试运行
    • 注意其中的数字是运行时输入的!

图片描述

  • 3个苹果,理论上是6公斤
    • 现在怎么就33公斤了呢?🤔

深入调试

  • :!pdb3 %

图片描述

  • 输入函数input的返回值类型是str
  • 导致结果出错
  • 尝试将结果转化为int

尝试转化

a = input("How many apples do you have:")
weight = int(a) * 2
print("You have ",weight, "kg apples.")
  • 修改之后 问题解决

图片描述

  • 但是如果输入的数值无法转化为数字呢?
    • 如果输入的苹果数量是
      • 字符串"abc"
    • int("abc")会发生什么??😱

错误输入

  • 输入了abc

图片描述

  • int("abc")报错

图片描述

  • 不想让用户看到这么多报错信息
    • 怎么办呢?

试着来

  • 注意!!!
    • 冒号
      • 是英文半角的
      • 紧跟着 前面的
        • try
        • except

图片描述

  • 冒号后面有缩进

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

    • 缩进

TAB

图片描述

  • 使用键盘中的Tab进行缩进

图片描述

  • 就像for循环冒号后面
    • 需要缩进一样
    • 缩进距离不多不少
      • 4个刚好

try

try:
	a = input("How many apples do you have:")
	weight = int(a) * 2
	print("You have ",weight, "kg apples.")
except:
	print("\33[41merror\33[0m", a, "is not a integer!")
  • 输出结果

图片描述

  • 我把错误瞒下来
    • 不报错可以么?

不报错

  • 这不行!!!😡
    • 异常错误不处理不行
    • 要明确得处理
    • 要明确的报错
  • 知道哪里错了
    • 才好修改

图片描述

  • 如果假装没犯错
    • 就会完全没有处理线索
    • 就会犯更大的错误
    • 程序大了绝对让人彻底崩溃
    • 到时候就想改也不知道怎么改了

对应禅语

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

图片描述

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

异常飘过

try:
    a = input("How many apples do you have:")
    weight = int(a) * 2
    print("You have ",weight, "kg apples.")
except:
    pass
  • 知错不报错
    • 虽然 except接收到了错误
    • 但是 轻轻飘过pass

图片描述

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

总结

  • 这次学习了
    • try
    • except
  • 尝试try着 运行
    • 尝试过程中 一旦发现了错误
      • 就 终止 try中的执行
    • 直接跳转到 except块

图片描述

  • 注意要点
    1. 半角冒号
    2. 缩进
    3. 错误信息输出
  • 有错就处理
    • 不要忽略、隐瞒
    • 否则找不到出错位置
  • 究竟应该如何理解try...except...呢?🤔
  • 下次再说!👋