python的Bug

  1. BUG的由来及分类
  2. 不同异常类型的处理方式
  3. 异常处理机制
  4. PyCharm的调试模式

BUG的由来及分类

世界第一部万用计算机进化版-马克2号

bug常见的类型

粗心导致的语法错误类型SyntaxError

(1)age=input('请输入你的年龄:')

if age>=18

print('成年人, 你该负法律责任了')

指出错误

input是str类型的 age也是str类型的 18是整数类型

使用转换字符来改错

age=input('请输入你的年龄:')
print(type(age))
if int(age)>=18:#将age转换为整数类型
     print('成年人, 你该负法律责任了')



while i<10:

print(i)

错误没有给i赋值

改错如下

i=3
while i<10:
    print(i)
    i+=1#否则i将是一个死循环状态

========================================================================

for i in range(3):
    uname=input('亲输入用户名:')
    pwd=input('亲输入密码:')
    if uname='admin' and pwd='admin':
        print('登陆成功')
        break
    else
        print('输入有误')
else
        print('对不起,三次据输入错误')
指出错误

赋值要用‘==’

else后没有加冒号:


for i in range(3):
    uname=input('亲输入用户名:')
    pwd=input('亲输入密码:')
    if uname=='admin' and pwd=='admin':
        print('登陆成功')
        break
    else:
        print('输入有误')
else:
        print('对不起,三次据输入错误')

 粗心导致错误的自查宝典

  1. 漏了末尾的冒号,如if语句,循环语句else子句等
  2. 缩进错误,该缩进的没缩进,不该缩进的缩进
  3. 把英文字符写成中文字符,把数字和字符拼接在一起
  4. 没有定义变量,比如说while的循环条件变量
  5. “==”比较运算符和“==”赋值运算符的混用

bug的常见类型

知识不熟练导致的错误

索引越界问题IndexError

lst=[11, 22, 33, 44]

print(lst[4])

lst=[11, 22, 33, 44]#索引是从0开始的,在这里面没有第四个元素
#print(lst[4])
print(lst[3])

append()方法的使用掌握不熟练

lst=[]

lst=append('A', 'B', 'C')

print(lst)

错误:

append的使用方法不对

append的添加方式一次只能添加一个

lst=[]
#lst=append('A', 'B', 'C')
lst.append('A')
lst.append('B')
lst.append('C')
print(lst)

 bug的常见类型

思路不清导致的问题解决方案

使用print()函数

使用’#'暂时注释部分代码

题目要求

豆瓣电影TOP250排行榜,使用列表存储电影信息

要求输入名字在屏幕上显示XXX出演了哪部电影

错误的代码


lst=[{'rating':[9, 7, 50], 'id':'1292052', 'type':['犯罪', '剧情'], 'title':'肖申克的救赎', 'acrots':['蒂姆.罗宾斯', '摩根.弗里曼']},
     {'rating':[9, 6, 50], 'id':'1291546', 'type':['爱情', '剧情', '同性'], 'title':'霸王别姬', 'acrots':['张国荣', '张丰毅', '巩俐', '葛优']},
     {'rating':[9, 6, 50], 'id':'1296141', 'type':['犯罪', '剧情'], 'title':'控方证人', 'acrots':['泰隆.鲍华', '玛丽.弗里曼']}]

name=input('请输入你要查询的演员:')
for item in lst:
    for movie in item:
        actors=movie['actors']
        print(actors)
        if name in actors:
            print(name+'出演了:'+movie)


lst=[{'rating':[9, 7, 50], 'id':'1292052', 'type':['犯罪', '剧情'], 'title':'肖申克的救赎', 'acrots':['蒂姆.罗宾斯', '摩根.弗里曼']},
     {'rating':[9, 6, 50], 'id':'1291546', 'type':['爱情', '剧情', '同性'], 'title':'霸王别姬', 'acrots':['张国荣', '张丰毅', '巩俐', '葛优']},
     {'rating':[9, 6, 50], 'id':'1296141', 'type':['犯罪', '剧情'], 'title':'控方证人', 'acrots':['泰隆.鲍华', '玛丽.弗里曼']}]

name=input('请输入你要查询的演员:')
for item in lst:#遍历列表会得到一个花括号 item是一个又一个的字典
    for movie in item:#遍历的字典,得到movie,是一个字典中的key
        print(movie)
        '''
        actors=movie['actors']
        print(actors)
        if name in actors:
            print(name+'出演了:'+movie)'''

 结果

请输入你要查询的演员:张国荣
rating
id
type
title
acrots
rating
id
type
title
acrots
rating
id
type
title
acrots

Process finished with exit code 0

改正之后


lst=[{'rating':[9, 7, 50], 'id':'1292052', 'type':['犯罪', '剧情'], 'title':'肖申克的救赎', 'acrots':['蒂姆.罗宾斯', '摩根.弗里曼']},
     {'rating':[9, 6, 50], 'id':'1291546', 'type':['爱情', '剧情', '同性'], 'title':'霸王别姬', 'acrots':['张国荣', '张丰毅', '巩俐', '葛优']},
     {'rating':[9, 6, 50], 'id':'1296141', 'type':['犯罪', '剧情'], 'title':'控方证人', 'acrots':['泰隆.鲍华', '玛丽.弗里曼']}]

name=input('请输入你要查询的演员:')
for item in lst:#遍历列表会得到一个花括号 item是一个又一个的字典
        act_lst=item['acrots']
        for actor in act_lst:
            if name in actor:
                print(name, '出演了', item['title'])
        '''
        actors=movie['actors']
        print(actors)
        if name in actors:
            print(name+'出演了:'+movie)'''

将不必要出错的注释掉

然后可以使用print()函数来检查调试

先将得到演员的列表

然后看演员是否在这个列表中

在的话输出这个演员和他所出演的电影的名称

===================================================================

被动掉坑:程序代码逻辑没有错只是因为,用户错误操作或者一些例外的情况而导致的程序崩溃

输入两个整数并进行除法运算

try:
    a = int(input('请输入一个整数:'))
    b = int(input('请输入另一个整数:'))
    result = a / b
    print('结果为:', result)
except ZeroDivisionError:
    print('除数不能为o哦')
    print('程序结束')

当除数为0时会报错我们可以使用这样的机制去将结果不报错

try:

.........

...........

.........

except ZerDivisionError

有多个错误的时候

捕获异常的顺序按照先子类后父亲类的顺序,为了避免遗漏的可能,可以在最后增加

BaseException

try:

.....

.....

.....

except Exception 1:

.........

..........

.........

except Exception 2:

.........

..........

.........

except   BaseException:

..........

.........

..........

try...except...else


try:
    a = int(input('请输入一个整数:'))
    b = int(input('请输入另一个整数:'))
    result = a / b
except BaseException as e:
    print('出错了', e)
else:
    print('计算结果为:', result)

try...except...else..finally


try:
    a = int(input('请输入一个整数:'))
    b = int(input('请输入另一个整数:'))
    result = a / b
except BaseException as e:
    print('出错了', e)
else:
    print('计算结果为:', result)
finally:
    print('谢谢您的使用')
序号异常类型描述
1ZeroDivisionError除(或取模)零(所有数据类型)
2IndexError

序列中没有此索引(index)

3KeyError

映射中没有这个键

4NameError未声明/初始化对象没有属性
5SyntaxErrorPython 语法错误
6ValueError

传入无效的参数据

traceback模块


import traceback
try:
    print('1-----------------')
    print(1/0)
except:
    traceback.print_exc()

Traceback (most recent call last):
  File "E:/新建文件夹/bug的常见类型.py", line 29, in <module>
    print(1/0)
ZeroDivisionError: division by zero

bug常见的类型粗心导致的语法错误自查宝典
知识点不熟悉练,练,练
思路不清print()语句
使用#注释
被动掉坑try except

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值