第十一章 Bug
97. Bug的常见类型—粗心导致的错误SyntaxError
101. try-except-else结构与try-else-finally结构
96. Bug的由来
(1)Bug的由来 世界上第一部万用计算机的进化版-马克2号(Mark Ⅱ)
(2)Debug
97. Bug的常见类型—粗心导致的错误SyntaxError
(1)三个例子
① input 输入类型为str
TypeError: '>=' not supported between instances of 'str' and 'int'
② i 未赋值,且采用了中文输入的 括号
③ “=="比较运算符和"="赋值运算符的混用
print('--------------------97.Bug的常见类型—粗心导致的错误------------------')
print('--(1)--')
age=int(input('输入年龄')) #str 类型转换为 int
if age>=18:
print('你已经成年')
'''法二:也可以
age=input('输入年龄')
if age>='18': #加引号
print('你已经成年')'''
print('--(2)--')
i=1
while i <3:
print(i)
i+=1
--------------------97.Bug的常见类型—粗心导致的错误------------------
--(1)--
输入年龄28
你已经成年
--(2)--
1
2
(2)粗心导致错误的自查宝典
① 漏了末尾的冒号,如if语句,循环语句,else子句等
② 缩进错误,该缩进的没缩进,不该缩进的瞎缩进
③ 把英文符号写成中文符号,比如说.引号,冒号,括号
④ 字符串拼接的时候,把字符串和数字拼在一起
⑤ 没有定义变量,比如说while的循环条件的变量
⑥ “=="比较运算符和"="赋值运算符的混用
98. Bug的常见类型—错误点不熟悉导致的错误
(1)两个例子
① 索引越界问题 IndexError
② append()方法的使用掌握不熟练
(2)错误点不熟悉导致的自查宝典
勤加练习!!!
99. ☆Bug的常见类型—思路不清导致的错误
思路不清导致的解决方案
(1)使用print() 函数
(2)使用' # " 暂时注释部分代码
例题要求:豆瓣电影Top250 排行,使用列表存储电影信息,要求输入名字在屏幕上显示xxx出演了哪部电影。
print('--------------------99.Bug的常见类型—思路不清导致的错误------------------')
print('''题目要求:
豆瓣电影Top250 排行,使用列表存储电影信息,
要求输入名字在屏幕上显示xxx出演了哪部电影。''')
lst=[{'rating':[9.7,50],'id':1292052,'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_lst=item['actors']
#for actor in actors_lst:
for actor in item['actors']:
if name == actor:
print(name+'出演了:'+item['title'])
--------------------99.Bug的常见类型—思路不清导致的错误------------------
题目要求:
豆瓣电影Top250 排行,使用列表存储电影信息,
要求输入名字在屏幕上显示xxx出演了哪部电影。
演员名张国荣
张国荣出演了:霸王别姬
100. Bug的常见类型—被动掉坑导致的错误
(1)被动掉坑程序代码逻辑没有错,只是因为用户错误操作或者一些“例外情况"而导致的程序崩溃
·题目要求:输入两个整数并进行除法运算
如:错把字母作为数字输入,错把0输入为分母;
(2)被动掉坑问题的解决方案
·Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部“消化,让程序继续运行
·当出现一个异常时:try…except…
·当出现多个异常时:try…except…except…
print('--------------------100.Bug的常见类型—被动掉坑导致的错误------------------')
try:
a = int(input('请输入第1个整数'))
b = int(input('请输入第2个整数'))
result = a / b
print('结果为', result)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('只能输入数字串')
print('程序结束')
--------------------100.Bug的常见类型—被动掉坑导致的错误------------------
请输入第1个整数2
请输入第2个整数3
结果为 0.6666666666666666
程序结束
101. try-except-else结构与try-else-finally结构
(1)try...except...else结构:如果try块中没有抛出异常,则执行else块,如果try块中抛出异常,则执行except块
print('--------------------101.try-except-else结构与try-else-finally结构------------------')
try:
a = int(input('请输入第1个整数'))
b = int(input('请输入第2个整数'))
result = a / b
except BaseException as e:
print('出错了',e)
else:
print('结果为', result)
print('程序结束')
--------------------101.try-except-else结构与try-else-finally结构------------------
请输入第1个整数e
出错了 invalid literal for int() with base 10: 'e'
程序结束
(2)try...except...else...finally结构:finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
try:
a = int(input('请输入第1个整数'))
b = int(input('请输入第2个整数'))
result = a / b
except BaseException as e:
print('出错了',e)
else:
print('结果为', result)
finally:
print('谢谢您的使用')
请输入第1个整数r
出错了 invalid literal for int() with base 10: 'r'
谢谢您的使用
102. Python中常见的异常类型
序号 | 异常类型 | 描述 |
1 | ZeroDivisionError | 除(或取模)零(所有数据类型) |
2 | lndexError | 序列中没有此索引(index) |
3 | KeyError | 映射中没有这个键 |
4 | NameError | 未声明/初始化对象(没有属性) |
5 | SyntaxError | Python语法错误 |
6 | ValueError | 传入无效的参数 |
103. traceback模块的使用
使用traceback 模块打印异常信息
import traceback
try:
print('--------')
print(1/0)
except:
traceback.print_exc()
104. PyCharm的程序调试
(1)断点
程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步的判断
(2)进入调试视图——三种方式
① 单击工具栏上的按钮
② 右键单击编辑区、点击.debug'模块名
③ 快捷键:shift+F9