1 Bug
一杯茶,一包烟,一个Bug改一天
程序错误,即英文的Bug,也称为缺陷、臭虫,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。 早期的计算机由于体积非常庞大,有些小虫子可能会钻入机器内部,造成计算机工作失灵。史上的第一只 "Bug" ,真的是因为一只飞蛾意外走入一电脑而引致故障,因此Bug从原意为臭虫引申为程序错误。 一些有趣的Bug有时也会成为一种乐趣。在电脑游戏中,一些Bug,假如不令游戏出现大错误的话,经常会变成一种玩游戏时的秘技。
2 语法错误
- 粗心、粗心、还是粗心
- 如:注意input('哈哈年龄')获取的都是字符串类型
3 异常处理
异常:
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
处理:
捕捉异常可以使用try/except语句。 try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。 如果你不想在异常发生时结束你的程序,只需在try里捕获它。
3.1 try……except 某错误
测试代码:
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b
print('结果为:',result)
except ZeroDivisionError:
print('对不起,除数不允许为0')
except ValueError:
print('对不起,只能输入数字串')
print('程序结束')
测试结果1:
请输入第一个整数python 对不起,只能输入数字串 程序结束
进程已结束,退出代码为 0
测试结果2:
请输入第一个整数10 请输入第二个整数25 结果为: 0.4 程序结束
进程已结束,退出代码为 0
测试结果3:
请输入第一个整数10 请输入第二个整数0 对不起,除数不允许为0 程序结束
进程已结束,退出代码为 0
3.2 try……except……else
测试代码:
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b
except BaseException:
print('出错了')
else:
print('结果为:',result)
print('程序结束')
测试结果1:
请输入第一个整数1 请输入第二个整数0 出错了 程序结束
进程已结束,退出代码为 0
测试结果2:
请输入第一个整数a 出错了 程序结束
进程已结束,退出代码为 0
测试结果3:
请输入第一个整数1 请输入第二个整数2 结果为: 0.5 程序结束
进程已结束,退出代码为 0
3.3 try……except……else……finally
测试代码:
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
result=a/b
except BaseException:
print('出错了')
else:
print('结果为:',result)
finally:
print('无论是否产生异常,总会被执行的代码')
print('程序结束')
测试结果:
请输入第一个整数25 请输入第二个整数0 出错了 无论是否产生异常,总会被执行的代码 程序结束
进程已结束,退出代码为 0
3.4 总结
try: <语句> #运行别的代码 except <名字name>: <语句> #如果在try部份引发了'name'异常 else: <语句> #如果没有异常发生 finally: <语句> #无论是否产生异常,总会被执行的代码
4 常见异常
- ZeroDivisionError 不能除0
- IndexError 数据中没有此索引
- KeyError 映射中没有这个键
- NameError 没有声明
- SyntaError 语法错误
- ValueError 传入无效的参数
5 traceback模块
该模块提供了一个标准接口,用于提取,格式和打印Python程序的堆栈痕迹。 它完全模仿了Python解释器在打印堆栈跟踪时的行为。 当您想在程序控制下打印堆栈迹线时,这非常有用,例如在解释器周围的“包装器”中。
在日常开发中,我们会做一些基本的异常处理,但是有时候只能打印我们处理的结果或者将异常打印出来,不能直观的知道在哪个文件中的哪一行出错。traceback模块就是为了解决这个问题出现的。
测试代码:
import traceback
try:
print('-----------')
print(1/0)
except:
traceback.print_exc()
测试结果:
Traceback (most recent call last): File "E:\pythonProject\Python_YSJ\chap11\test.py", line 7, in <module> print(1/0) ZeroDivisionError: division by zero
进程已结束,退出代码为 0