python中debug有什么用途_18.python之如何debug

原本按照计划,这节课要做一个关于函数的练习,但我希望在拿到题目时,你能够先自己尝试。在编程时你会遇到很多次报错,为了能够更好的排查错误,我临时决定加一节课来讲如何debug。

对于计算机领域里的程序故障,我们叫作bug(臭虫),所以自然也就把排除程序故障叫作debug。下面讲3种debug的方法。

1、看程序提示

程序运行报错时会打印出提示,我们可以根据提示确定bug的位置和错误类型。看下面的代码:

password = input('请输入密码:')

if password = 123:

print('密码正确!')

程序打印结果:

我们可以看到错误类型是【invalid syntax】,代表语法错误。图中第一行最后的【line 25】代表bug出现在代码的第25行(这段代码是从第24行开始写的),【=】下面的小箭头代表bug的位置。看到这里我们很容易得知代码中的【=】应该写成【==】。

修改代码后再次运行,打印结果是:

错误依旧发生在第25行,bug出现在冒号位置。错误提示是【invalid character in identifier】,意思是标识符中的字符无效,即使用了python不能识别的字符。仔细看这个冒号,发现是中文的冒号。

修改成英文冒号运行代码,程序正常运行。

通过看程序提示,能够轻易找出一些常见的错误。它们大多是因为粗心导致的,也是新手很容易犯的。如下:if语句、循环语句、函数末尾缺少冒号

把英文符号写成中文符号

没有缩进或不该缩进时缩进了

【==】和【=】混用

不同类型的数据不能拼接在一起

2、上网搜索

在前面的课程中,我们已经多次提到要利用网络资源来解决编程中的问题。比如第6课中的通过百度得知input()函数返回的数据类型是字符串。在此不再赘述。

在python的学习中,这个方式帮我解决了很多问题,也让我学到了很多课程中不会讲到的知识点。所以,一定要利用好网络资源,毕竟任何书和课程都不可能包含所有的知识点。

就像书和课程不能包含所有的知识点一样,你遇到的每一个bug也不一定都能在网上找到答案。因此,我们还需要学会自行排查。

3、自行排查

在程序运行中,有些bug会通过程序提示报出,而有时虽然程序不会报错,但结果却并非我们期望的。这时候,我们需要通过print()函数和【#】来排查错误。

print()函数的作用是打印出关键步骤的运行结果,看是否与我们期望的结果一致。【#】起注释作用,且python不会执行注释的代码,将可能有bug的代码注释掉,看程序能否正常运行。

下面用一个案例来说明print()函数和【#】是如何运用的。

我平时喜欢吃快餐麦当劳、肯德基和汉堡王,他们中很多餐品的名称很接近,难以判断是哪家的。这里有一份店名和餐品名的对应表,要求输入餐品名后能打印出是哪家店的产品。代码如下:

menu = {

'麦当劳':['麦辣鸡腿汉堡','板烧鸡腿堡','麦乐鸡'],

'肯德基':['香辣鸡腿堡','新奥尔良烤鸡腿堡','吮指原味鸡'],

'汉堡王':['霸辣鸡腿堡','香脆鳕鱼堡','王道嫩香鸡块']

}

food = input('请输入餐品名称:')

for i in menu:

eatery = [i]

if food in eatery:

print(food+'是'+i+'的餐品')

程序运行后发现,虽然没有报错,但是并没有像我们预想的那样输出结果。因此需要对代码进行排查。

检查前8行代码,没有发现问题,那么问题一定出在for循环内部。先将最后两行代码用【#】注销,然后用print()函数打印出变量eatery的值。代码如下:

for i in menu:

eatery = [i]

print(eatery)

#if food in eatery:

# print(food+'是'+i+'的餐品')

运行代码结果为:

请输入食品名称:麦辣鸡腿汉堡

['麦当劳']

['肯德基']

['汉堡王']

我们发现打印的结果是店名,而我们想要的是餐品列表,这样才能用if语句判断输入的餐品是否在餐品列表中。

检查【eatery = [i]】语句,发现这句话是把餐馆名传给变量eatery。要想传递餐品列表,需要把代码改为【eatery = menu[i]】,这样才能取到字典中键对应的值,也就是餐厅对应的餐品列表。

因此,最终的代码为:

menu = {

'麦当劳':['麦辣鸡腿汉堡','板烧鸡腿堡','麦乐鸡'],

'肯德基':['香辣鸡腿堡','新奥尔良烤鸡腿堡','吮指原味鸡'],

'汉堡王':['霸辣鸡腿堡','香脆鳕鱼堡','王道嫩香鸡块']

}

food = input('请输入食品名称:')

for i in menu:

eatery = menu[i]

if food in eatery:

print(food+'是'+i+'的餐品')

今天的课程就到这里,下节课进行函数最后一次的学习。为了更好的复习之前的知识,我做了一份思维导图,在公众号中发送【复习】二字即可获得。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值