Python基础学习——Debug - Go语言中文社区

Python基础学习——Debug


 

一、Bug的常见类型

1.粗心bug

例1:

#Debug前的代码
a = input('请输入密码:')
if a == '123456'
    print('通过')

# 运行之后,仔细看报错,通过理解报错信息,可快速定位错误的根源
# 本例题中有3个关键信息:
#(1)line 2代表这个bug出现在第2行,所以,我们在Debug的时候,可以优先从第2行开始检查。
#(2)^代表bug发生的位置,这里指出的位置是第二行末尾。
#(3)这一行写的是错误类型,SyntaxError指的是语法错误。
# 若运行后看不懂报错信息,找度娘就基本知道是哪种类型的错误。 

# Debug后的代码
a = input('请输入密码:')
if a == '123456':
    print('通过')

 

2.知识不熟练bug

       第二种bug:由于知识不够熟练而引起的错误。这种错误给我们的启示是:当你发现知识点记不清或者不能确定的时候,就要及时复习或者上网搜索。不要强行写出自己不敢确定的代码,这种情况往往容易出错。

例2:

# Debug之前
a = []
a.append ('A','B','C')
print(a)

# 问题分析:
# 查找append()函数的相关知识,发现并没有a=append('A','B','C') 这种用法。
# append()函数是列表的一个方法,要用句点.调用,且append()每次只能接受一个参数

# Debug之后
a = []
a.append('A')
a.append('B')
a.append('C')
print(a)

3.思路不清bug

       思路不清指的是当我们解决比较复杂的问题时,由于我们对细节和实现手段思考得不够清楚,要么导致一步错,步步错;要么虽然没有报错,但是程序没有达到我们想要的效果。

(1)print()函数

         主要用于检验对错:遇到关键步骤时print出来,看是否达到我们所期望的结果,以此来揪出错误的那一步。

(2)#号

         当你写的代码总是不对,又弄不明白哪里不对的时候,使用#号把后面的代码注释掉,一步一步运行,可以帮助排除错误。

例3:

Debug之前程序没有报错,但是没有实现想要的效果。例题要求如下图:

# Debug之前
movie = {
    '妖猫传':['黄轩','染谷将太'],
    '无问西东':['章子怡','王力宏','祖峰'],
    '超时空同居':['雷佳音','佟丽娅']
}

name=input('你查询的演员是?')
for i in movie:
    actors=[i]
    if name in actors:
        print(name+'出演了'+i)

# 问题分析:
# 看第10行:想要用for循环遍历这个字典。第11行:试图取出字典中的值。
# (对字典用法熟悉的人可以看出,这不符合语法规范)

#使用print和#号排查错误:
movie = {
    '妖猫传':['黄轩','染谷将太'],
    '无问西东':['章子怡','王力宏','祖峰'],
    '超时空同居':['雷佳音','佟丽娅']
}

name=input('你查询的演员是?')
for i in movie:
    actors=[i]
    print(actors) #使用print() 函数查看操作是否正确。
    #if name in actors:
        #print(name+'出演了'+i)

#Debug之后
movie = {
'妖猫传':['黄轩','染谷将太'],
'无问西东':['章子怡','王力宏','祖峰'],
'超时空同居':['雷佳音','佟丽娅'],
}

name = input('你想查询哪个演员?')
for i in movie:
    actors = movie[i]
    #取出字典的值
    if name in actors:
        print(name+'出演了电影'+i)

4.被动掉坑bug

        被动掉坑,是指有时候你的代码逻辑上并没有错,但可能因为用户的错误操作或者是一些“例外情况”而导致程序崩溃。

        为了不让一些无关痛痒的小错影响程序的后续执行,Python给我们提供了一种异常处理的机制,可以在异常出现时即时捕获,然后内部消化掉,让程序继续运行。就是try...except...语句。具体用法:

例4:

print('n欢迎使用除法计算器!n')

while True:
    try:
        x = input('请你输入被除数:')
        y = input('请你输入除数:')
        z = float(x)/float(y)
        print(x,'/',y,'=',z)
        break  # 默认每次只计算一次,所以在这里写了 break。
    except ZeroDivisionError:  # 当除数为0时,跳出提示,重新输入。
        print('0是不能做除数的!')
    except ValueError:  # 当除数或被除数中有一个无法转换成浮点数时,跳出提示,重新输入。
        print('除数和被除数都应该是整值或浮点数!')
    
    # 方式2:将两个(或多个)异常放在一起,只要触发其中一个,就执行所包含的代码。
    # except(ZeroDivisionError,ValueError):
    #     print('你的输入有误,请重新输入!')
    
    # 方式3:常规错误的基类,假设不想提供很精细的提示,可以用这个语句响应常规错误。
    # except Exception:
    #     print('你的输入有误,请重新输入!')
    

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40276872/article/details/89513402
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 15:15:41
  • 阅读 ( 957 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢