Python__20-- 常见Bug

时间:2023-01-02 22:05:38

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