【Python 27】程序异常处理

【Python 27】程序异常处理,第1张

目录

1、Bug的由来及分类

2、不同异常类型的处理方式

3、异常处理机制

4、PyCharm的调试模式


1、Bug的由来及分类

世界上第一部万用计算机的进化版-马克2号(Mark ll),出现了一个昆虫,并将其命名为 bug(臭虫)

序号异常类型描述
1ZeroDivisionError除(或取模)零(所有数据类型)
2IndexError序列中没有此索引(index)
3KeyError映射中没有这个键
4NameError未声明/初始化对象(没有属性)
5SyntaxErrorPython语法错误
6ValueError传入无效的参数
# 作   者:要努力,努力,再努力
# 开发日期: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的调试模式

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/730159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存