本章内容:
> Bug常见类型
- 粗心导致的语法错误,解决方案:查看自查宝典
- 知识点不熟悉导致的错误,解决方案:不断的练习
- 思路不清导致的错误,解决方案:使用print(语句和注释
- 代码逻辑没错,用户操作不正确导致的错误,解决方案:使用异常处理机制
> 异常处理机制的几种结构 | > PyCharm调试的步骤 |
• try-except | • 设置断点 |
• try-except-except | • 单步运行 |
• try-except-except-else | • 观察变量 |
• try-except-except-else-finally | • 查找问题 |
• 重新调试,直至问题解决 |
本章实例:
示例7-1粗心导致的语法错误SyntaxError
# 第一段代码
age=input('请输入你的年龄:')
if age>"18"
print('成年人,做事需要负法律责任了!')
# 第二段代码
i=1
while i<10:
print(i)
i+=1
# 第三段代码
for i in range (3):
uname=input('请输入用户名:')
pwd=input('请输入密码:')
if uname= 'admin' and pwd='admin':
print('登录成功!')
break
else:
print('输入有误!')
else:
print('对不起,三次均输入错误')
示例7-2修改示例7-1中的语法错误
# 第一段代码
age=input('请输入你的年龄:')
if age>"18":
print('成年人,做事需要负法律责任了!')
# 第二段代码
i=1
while i<10:
print (i)
i+=1
# 第三段代码
for i in range (3):
uname=input('请输入用户名:')
pwd=input('请输入密码:')
if uname=='admin' and pwd=='admin':
print('登录成功!')
break
else:
print('输入有误!')
else:
print('对不起,三次均输入错误')
示例7-3知识点掌握不熟练导致的错误
# 第一段代码
lst=[11,22,33,44]
print(lst[4])
# 第二段代码
lst=[]
lst=append('A','B','C')
print(lst)
示例7-4修改示例7-3中的错误
# 第一段代码
lst=[11,22,33,44]
print(lst[3])
# 第二段代码
lst=[]
lst.append('A')
lst.append('B')
lst.append('C')
print(lst)
示例7-5思路不清导致的问题
lst=[
{'rating':[9.7,50],'id':'1292052','type':['犯罪','剧情'],'title':'肖申克的救赎','actors':['蒂姆.罗宾斯','摩根.弗里曼']},
{'rating':[19.6,50],'id':'1291546','type':['剧情','爱情','同性'],'title':'霸王别姬','actors':['张国菜','张丰毅','巩俐','葛优']},
{'rating':[9.6,50],'id':'1296141','type':['剧情','犯罪','怂疑'],'title':'控方证人','actors':['泰隆.鲍华','玛琳.黛德丽']},
]
name=input('请输入你要查询的演员:')
for item in lst:
for movie in item:
actors=movie ['actors']
if name in actors:
print(name,'出演了', movie)
示例7-6思路不清导致的问题解决方案
lst=[
{'rating':[9.7,50],'id':'1292052','type':['犯罪','剧情'],'title':'肖申克的救赎','actors':['蒂姆.罗宾斯','摩根.弗里曼']},
{'rating':[19.6,50],'id':'1291546','type':['剧情','爱情','同性'],'title':'霸王别姬','actors':['张国菜','张丰毅','巩俐','葛优']},
{'rating':[9.6,50],'id':'1296141','type':['剧情','犯罪','怂疑'],'title':'控方证人','actors':['泰隆.鲍华','玛琳.黛德丽']},
]
name=input('请输入你要查询的演员:')
for item in lst:
# for movie in item:
# actors=movie ['actors']
# if name in actors:
# print(name,'出演了', movie)
print(item)
actors_lst=item.get('actors')
print(actors_lst)
if name in actors_lst:
title=item.get('title')
print(title)
print(name,'出演了',title,'电影')
示例7-8输入两个整数并进行除法运算
num1=int(input('请输入一个整数:'))
num2=int(input('请输入另一个整数:'))
result=num1/num2
print('结果:',result)
示例7-9try-except结构的使用
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
print('结果:', result)
except ZeroDivisionError:
print('除数为0')
示例7-10多个except结构
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
print('结果:', result)
except ZeroDivisionError:
print('除数不允许为0')
except ValueError:
print('不能将字符串转换为数字')
except BaseException:
print('未知异常')
示例7-11try-except-else结构
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
except ZeroDivisionError:
print('除数不允许为0')
except ValueError:
print('不能将字符串转换为数字')
except BaseException:
print('未知异常')
else:
print('结果:', result)
示例7-12try-except-else-finally结构
try:
num1 = int(input('请输入一个整数:'))
num2 = int(input('请输入另一个整数:'))
result = num1 / num2
except ZeroDivisionError:
print('除数不允许为0')
except ValueError:
print('不能将字符串转换为数字')
except BaseException:
print('未知异常')
else:
print('结果:', result)
finally:
print('程序执行结束!')
示例7-13raise关键字的使用
try:
gender=input('请输入您的性别:')
if gender!='男' and gender!='女':
raise Exception('性别只能是男或女')
else:
print('您的性别是:',gender)
except Exception as e:
print(e)
示例7-14常见异常类型的产生
# (1)ZeroDivisionError
# print(10/0)
# (2)IndexError
# lst[10,30,50,90]
# print(lst[4])
# (3)KeyError
# d={'name':'ysj','age':30}
# print(d['gender'])
# (4)NameError
# print(hello)
# (5) SyntaxError
# print('hello)
# (6) ValueError
# print(int('a'))
# (7)AttributeError
# i=10
# print(i.name)
# (8)TypeError
# print('hello'+123)
# (9)IndentationError
# print('hello')
示例7-15被调试的代码
i=1
while i<10:
print(i)
注:本文中的内容及示例均出自@Python_子木的视频。