目录
1、Bug的由来及分类
2、不同异常类型的处理方式
3、异常处理机制
4、PyCharm的调试模式
1、Bug的由来及分类
世界上第一部万用计算机的进化版-马克2号(Mark ll),出现了一个昆虫,并将其命名为 bug(臭虫)
序号 | 异常类型 | 描述 |
1 | ZeroDivisionError | 除(或取模)零(所有数据类型) |
2 | IndexError | 序列中没有此索引(index) |
3 | KeyError | 映射中没有这个键 |
4 | NameError | 未声明/初始化对象(没有属性) |
5 | SyntaxError | Python语法错误 |
6 | ValueError | 传入无效的参数 |
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:21
"""
print(10/0) # ZeroDivisionError
"""
''' IndexError
lst = [11, 22, 33, 44]
print(lst[4])
'''
''' KeyError
dict = {'name': '张三', 'age': 20}
print(dict['gender'])
'''
'''NameError
print(name)
'''
''' SyntaxError
int a = 20
'''
'''ValueError
a = int('hello')
'''
2、不同异常类型的处理方式
报错例子1:输入类型错误
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 8:13
age = input('请输入你的年龄')
if age>18:
print('成年人')
改正:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 8:13
age = int(input('请输入你的年龄'))
if age > 18:
print('成年人')
报错例子2:未给初始值、未给步长增量
while i < 10:
print(i)
改正:
i = 0
while i < 10:
print(i)
i += 1
报错例子3:索引越界问题
lst = [11, 22, 33, 44]
print(lst[4])
报错例子4: append() 方法使用不当
lst = []
lst = append('A', 'B', 'C')
print(lst)
改正: append() 每次只能添加一个元素
lst = []
lst.append('A')
lst.append('B')
lst.append('C')
print(lst)
报错例子5: 逻辑错误
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 10:23
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:
print(item)
for movie in item:
print(movie)
actors = movie['actors']
if name in actors:
print(name + '出演了:' + movie)
改正:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 10:23
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: # 遍历列表 item是字典
act_lst = item['actors']
for actor in act_lst:
if name == actor:
print(name + '出演了' + item['title'])
'''for movie in item: # 遍历字典,得到的key
print(movie)
actors = movie['actors']
if name in actors:
print(name + '出演了:' + movie)
'''
其他错误类型:
① 漏了末尾的冒号,如 if 语句,循环语句,else子句等
② 缩进错误,该缩进的没缩进,不该缩进的瞎缩进
③ 把英文符号写成中文符号,比如说:引号,冒号,括号
④ 字符串拼接的时候,把字符串和数字拼在一起
⑤ 没有定义变量,比如说while的循环条件的变量
⑥ “==” 比较运算符和 ”=” 赋值运算符的混用
3、异常处理机制除零错误、输入字符串不合法字符:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:00
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a / b
print('结果为:', a/b)
程序解决:异常抛出
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:00
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a / b
print('结果为:', a/b)
except ZeroDivisionError:
print('除数不能为零')
except ValueError:
print('只能输入数字')
try...except...else结构:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:11
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a / b
except BaseException as e: # 将出现的异常直接报出来
print('出错了', e)
else:
print('计算结果为', result)
try...except...else...finally结构:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:11
try:
a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a / b
except BaseException as e: # 将出现的异常直接报出来
print('出错了', e)
else:
print('计算结果为', result)
finally:
print('无论是否发生异常,总会被执行的代码') # 常用来释放 try 块中申请的资源
trackback 模块 :
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/23 11:28
import traceback
try:
print('------------')
print(1/0)
except:
traceback.print_exc()
4、PyCharm的调试模式
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)