Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209420
  • 博文数量: 247
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2501
  • 用 户 组: 普通用户
  • 注册时间: 2020-08-10 06:35
文章分类
文章存档

2024年(32)

2023年(86)

2022年(53)

2021年(42)

2020年(34)

我的朋友

分类: Python/Ruby

2023-04-24 19:43:23




























- 不但要有自己的报错 - 还要保留系统的报错 - 有可能吗? ### 保留报错 ![图片描述]() - {BANNED}最佳终结果 ![图片描述]() - 可以让报错详细一些吗? - 比如文件、行号 ### 保留报错细节 ![图片描述]() - import traceback - traceback.print_exc() ![图片描述]() ## 总结 - 这次学习了 - try - except - 注意要点 - 半角冒号 - 缩进 - 错误信息输出 - 有错就处理 - 不要忽略、隐瞒 - 否则找不到出错位置 - 还可以用traceback把 - 系统报错信息原样输出 - 但是代码量好多啊 - 10多 行了 ???? - 可以把他输入部分和输出部分么????? - 我们下次再说!???? - 蓝桥-> - github-> - gitee-> 尝试捕获异常 回忆上次内容
  • 变量相加
  • 整型数字变量可以相加
  • 字符串变量也可以拼接

  • 但是
  • 字符串 和 整型数字
  • 整型数字 和 字符串
  • 不能相加

  • 怎么办?
  • 转格式
  • 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 字(可选)
  • 这不行!!!????
  • 异常错误不处理不行
  • 要明确得处理
  • 要明确的报错

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

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

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

添加图片注释,不超过 140 字(可选)
  • 精准地捕获异常
  • 不写 except:pass 风格的代码
  • 那什么是 except:pass 风格的代码呢?

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

添加图片注释,不超过 140 字(可选)
  • 上面这是错的!
  • 这是{BANNED}最佳要命的
  • 让人没有追踪trace的痕迹
  • 无法调试debug!
  • 无语问苍天????!

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

  • 有可能吗?
保留报错
添加图片注释,不超过 140 字(可选)
  • {BANNED}最佳终结果
添加图片注释,不超过 140 字(可选)
  • 可以让报错详细一些吗?
  • 比如文件、行号
保留报错细节
添加图片注释,不超过 140 字(可选)
  • import traceback
  • traceback.print_exc()

添加图片注释,不超过 140 字(可选)
总结
  • 这次学习了
  • try
  • except

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

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


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

  • 我们下次再说!????
  • 蓝桥->
  • github->
  • gitee->


阅读(243) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~