python基础笔记10—Bug

常见Bug的分类
粗心导致的语法错误SynataxError
- Bug自查:
1.漏掉末尾的“:”,如if,else语句,for,while循环。
2.缩进错误,该缩进的没缩进,不该缩进的瞎缩进。
3.英文符号写成中文符号,如逗号,括号,冒号,引号。
4.字符串拼接时,把字符串和数字拼在一起。
5.没定义变量。如while的循环条件的变量。
6.=和==混淆使用,=表示赋值,==表示比较。
7.英文单词拼写错误。
age=input('请输入你的年龄:')#注意age=input()的类型为str而非int
'''解决方法2:age=int(input('xxxx'))'''
#解决方法2:
if int(age)>=18:
print('成年人,可负法律责任')
else:
print('未成年')
i=0 #要定义变量
while i<10:
i += 1 #要给出迭代
print(i)
i=0 #定义变量
for i in range(3):
pwd=input('请输入密码:')
if pwd=='1234': #这里是比较pwd和1234,故用==
print('密码正确')
break
else:
print('密码不正确')
else:
print('您的账户已被锁定')
知识不熟练导致的错误
如:
- 索引越界问题IndexError
lst=[1,2,3,4]
#print(lst[4])#报错,列表索引从0开始,这个lst的索引范围是0-3
print(lst[3]) #4
- append()方法使用不熟练
1.是对列表的增操作:列表名.append()
2.一次只能添加一个元素
lst=[1,2,3,4]
lst.append(5)#[1,2,3,4,5]
print(lst)
解决: 练习!!!!!
思路不清晰导致的问题
- 解决方案:
- 使用print()函数
- 用#暂时注释部分代码
例:
豆瓣电影top20排行,用列表储存电影信息,要求:
输入名字在屏幕上显示xxxx出演了哪部电影。
lst=[{'rating':[9,7,50],'id':1292952,'type':['犯罪','剧情'],'title':'肖申克的救赎','actors':['蒂姆.罗宾斯','摩根.弗里曼']},
{'rating':[9,6,50],'id':1291546,'type':['剧情','爱情'],'title':'霸王别姬','actors':['张国荣','巩俐','张丰毅','葛优']},
{'rating':[9,6,50],'id':1296141,'type':['犯罪','嫌疑'],'title':'控方证人','actors':['泰隆.鲍华','玛琳.戴德利']}]
name=input('请输入要查询的演员:')
for item in lst: #遍历裂变,得到一个{}
actors = item['actors']# 这里遍历的结果为key为actors的对应的value
# print(actors)
if name in actors:
print(name + '出演了' + item['title'])
break
else:
print('查找错误')
被动掉坑
程序代码逻辑没错,但由于用户的错误操作或‘例外情况’导致程序崩溃
例:输入2个整数并进行除法运算
a=int(input('请输入整数:'))
b=int(input('请输入另一个整数:'))
c=a/b
print('c=',c)
- 解决方案:python提供了异常处理机制,可在异常出现时及时捕获,然后内部“消化”,让程序继续运行
异常处理机制
- try…except 结构
try:
可能出现异常的代码块
except 错误类型1:
出现异常时的处理代码
except 错误类型2:
出现异常时的处理代码
.......
except BaseException as e:
print(e)
注意: 捕获异常的顺序按照先子类后父亲类的顺序,为避免遗漏可能出现的异常,可在最后增加BaseException
try:
a = int(input('请输入整数:'))
b = int(input('请输入另一个整数:'))
c = a / b
print('c=', c)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('只能输入数字')
except BaseException as e:
print(e)
- try…except…else 结构
若try块抛出异常,则执行except块;try块没抛出异常,则执行else块
try:
a = int(input('请输入整数:'))
b = int(input('请输入另一个整数:'))
c = a / b
except ZeroDivisionError:
print('除数不能为0')
except BaseException as e:
print('出错了',e)
else:
print('c=', c)
- try…except…else…finally 结构
无论程序是否出错都会执行finally块,能用来释放try块中申请的资源
try:
a = int(input('请输入整数:'))
b = int(input('请输入另一个整数:'))
c = a / b
except ZeroDivisionError:
print('除数不能为0')
except BaseException as e:
print('出错了',e)
else:
print('c=', c)
finally:
print('无论是否产生异常,总会被执行的代码')
print('程序结束')
python中常见的异常类型
- ZeroDivisionError:除以(取模)0
- IndexError:序列中无此索引,如索引越界
- KeyError:映射中没有这个键
- NameError:未定义、初始化对象
- SyntaxError: python语法错误
- ValueError:传入无效的参数
dic={'name':'张三','age':20,}
print(dic['name'])#张三,输出键name对应的值
print(dic['gender'])#KeyError,字典中没有键gender
异常处理机制
- traceback模块
可打印异常信息
import traceback#导入traceback
try:#这部分写可能出错的代码
print( '----------------------- ' )
num=10/0
except:
traceback.print_exc()
返回结果
-----------------------------------------------
Traceback (most recent call last):
File "D:\python练习\demo10.py", line 85, in <module>
num=10/0
ZeroDivisionError: division by zero
PyCharm开发环境的调试
断点
在可能出问题或者需要调试的代码行左侧单击左键
进入调试视图的三种方式
- 右键—>Debug
- 单击工具栏上的Run—>Debug
- 快捷键:shift+F9