定远县建设小学网站,建筑工程类招聘网站,中国建设银行官网个人登录,沪深互动平台尝试捕获异常
回忆上次内容
变量相加 整型数字变量可以相加字符串变量也可以拼接 但是 字符串 和 整型数字整型数字 和 字符串不能相加 怎么办#xff1f; 转格式int(“1”)str(2) 可是 如果输入的苹果数量是 字符串abc int(“abc”)会发生什么#xff1f; 转格式int(“1”)str(2) 可是 如果输入的苹果数量是 字符串abc int(“abc”)会发生什么
先试试看
虽然我有了心理准备 但是 python 显然还没有准备好 要让 python 知道 什么时候可能会出错
简化问题
python3 的意思是 不知道怎么把 abc 转化为十进制数 不但 python3 没有办法转化 我也没有思路 有的时候数字中确实可以有 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 try try 就是 试着来 把需要试着来的代码部分放到 try 里面 试着 成功了 就继续运行 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个就很合适
尝试运行
运行失败了 成功报了错 原来想的是 试着执行这句 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!)尝试
试试行不行 这次终于成功地报错了 或者说我接管了相关的报错信息对于这类错有了自己的处理这就是捕获了异常并且处理了异常 红颜色的 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这不行!!! 异常错误不处理不行要明确得处理要明确的报错 知道哪里错了 才好修改 如果假装没犯错 就会完全没有处理线索程序大了绝对让人彻底崩溃
对应禅语
错误不应被悄悄传递 除非你确定需要这样做 精准地捕获异常 不写 except:pass 风格的代码那什么是 except:pass 风格的代码呢
异常飘过
就是 那种知错不报错的方式 虽然 except接收到了错误但是 轻轻飘过pass 上面这是错的 这是最要命的让人没有追踪trace的痕迹无法调试debug!无语问苍天 不但要有自己的报错 还要保留系统的报错 有可能吗
保留报错 最终结果 可以让报错详细一些吗比如文件、行号
保留报错细节 import traceback traceback.print_exc() 总结 这次学习了 tryexcept 注意要点 半角冒号缩进错误信息输出 有错就处理 不要忽略、隐瞒否则找不到出错位置还可以用traceback把 系统报错信息原样输出 但是代码量好多啊 10多 行了 可以把他输入部分和输出部分么 我们下次再说 蓝桥-https://www.lanqiao.cn/courses/3584 github-https://github.com/overmind1980/oeasy-python-tutorial gitee-https://gitee.com/overmind1980/oeasypython