1.5 首先要学会找错

很多初学者往往认为书写代码最难和最能体现能力的就是将代码书写出来。其实,这并不正确。从经验来看,要想完成一个正确的代码功能,比如一个数据分析任务,代码的书写编辑往往只是第一步,但是由于经验不足和一些无法预料的数据处理问题,通常很难保证写出来的代码能够正确的运行。这时,就需要我们进行代码的调试。这个能力非常关键,也是很多初学者无法直接从书本上学到的本领。

 那么如何掌握住这种能力呢?
第一,就是需要我们熟悉编辑器提供的调试功能,这是最基本的。

我们来看一个例子:

str = input()
str = str.upper()
print(Str)

通常如果有明显的问题,代码编辑器如PyCharm会有提示,比如你会注意到此时的Str下面有一个红色的波浪线。这通常表示有问题。

而且在运行后,编辑器也会提示具体的错误信息,比如这里就说明Str没有定义(not defined)。

我们不是定义了吗?原因是Python区分大小写,它认为Str和str不是一个变量,当然会提示没有定义。

但是有时候错误提示并不会很明显。比如我们想把输入的字符变成大写和小写,分别连接在一起再一起输出,我们来试一试:

str = input()
str = str.upper()
str = str.lower()
print(str + str)

但是运行结果并不正确,这里只输出两个都是小写的单词。


对于字符而言,加号表示连接,所以代码的意思就是将大写转换的和小写转换的拼接在一起,lower表示小写转换。现在这种错误不同于刚才的错误,它属于逻辑错误,也就是说代码并不是不正确,而是没有体现出你的功能要求,具有了其他的功能。

那么该如何处理呢?调试和解决代码错误的关键在于找到错误的位置,这是第二个大家要牢牢记住的秘诀。这句话大家可以好好的在学习中多体会。

那么我们该如何知道哪里出了问题呢?我们来试一试。

比较简单的方法就是增加输出,可以尝试在一些关键的位置输出变量的数值,看看这些变量的数值是不是自己的预期。我们增加了两行输出,

str = input()
str = str.upper()
print(str)
str = str.lower()
print(str)
print(str + str)

运行为:

看得出都是我们所希望的结果。那么我们基本可以断定问题应该在最后一行。当目光注意到这个地方,你可以已经注意到str此时都是小写的字符,你也可以反过来从结果来推测最后一个print的第一个str其实已经不是最初的大写字符了。原因是第二次小写转换导致了第一次大写转换已经丢失,毕竟一个变量不可能存放多个数值。

那么我们就使用两个变量。

str = input()
str1 = str.upper()
print(str1)
str2 = str.lower()
print(str2)
print(str1 + str2)

在这里,我们不怕麻烦,分别建立了str1和str2,分别存储大写的字符和小写的字符。这里也说明一个问题,变量的定义是根据需要来进行,如果你需要存储一个数值,并且继续使用在后续的其他地方,那么就到了定义变量的时候了。

但是这种写法并不很好,代码多了后,我们很难记得str1和str2究竟哪一个是大写、哪一个是小写。因此最好见名知义。

str = input()
strUppr = str.upper()
print(strUppr)
strLwr = str.lower()
print(strLwr)
print(strUppr + strLwr)

这里的变量名称我们采取的一种常见的方法,首先使用多个单词组合,拼音有时也是不错的选择,使得名称含义更为明确,同时为了节省不必要的输入,我们对所有单词进行了一些缩略处理,比如Upper变成了Uppr等。

这里的规则是保持第一个字母不变,单词后面字母中的元音略去。同时这两个单词一般从第二个开始大写开头,形成一种中间高两头低的效果,就像骆驼的驼峰,因此也被称为骆驼命名法。

定位错误除了刚才我们所说的增加print输出变量的功能外,其实我们还可以使用第二种更为方便的断点功能。方法很简单,直接在需要增加断点的代码行前点击,就会看到多个一个红色的圆,表示断点。再次点击,断点就会消失。

那么什么是断点?我们运行就知道了。不过,这个运行不能还和以前一样,而是应该选择运行菜单中的Debug。

这个单词就表示找错的意思,有兴趣的同学可以到网上去了解这个单词的前世今生,它与一只几十年前的小虫子有关系。

https://baike.baidu.com/item/DEBUG/825293icon-default.png?t=M0H8https://baike.baidu.com/item/DEBUG/825293仍然和以前一样,第一次调试运行需要点击Exec选项。

第一次运行仍然等待我们的输入,我们仍然输入一个try。

回车确认后,以前的代码就会一下子运行到底,全部结束,但是这时输入完毕后,你会发现代码会停在这个断点处,也就是说,断点后的最后一行语句暂时不执行,代码被中断在此。


这个时候PyCharm下方会出现一个Debugger窗格,你可以仔细的观察各个变量的数值,其中右下方会显示变量及其现在的数值,据此可以观察是否符合预期,就像以前print输出一样,只不过更加简单。仔细观察可以发现,此时的str只有一个值,即小写的“try”,大写的“try”已经没有了,因此最后一行语句不可能同时输出大写和小写的str变量值。

继续点击屏幕左边的“继续程序”按钮,即可继续运行,最终全部结束运行。

此时点击“Debugger”窗格到控制台(“Console”)窗格,即可看到最终的结果。

以上我们介绍了基本的调试方法,那么第三个重要方法就是预防为主,毕竟治病治于未病嘛!

比如建议大家书写代码不要一股脑全部写出来,最好能写出一个功能,就及时测试下,这样更便于及时定位,及时排除错误。

另外,代码的书写本身也很重要,良好的代码书写习惯和规范的用法都是增强代码可读性的基础,从而也有助于代码的理解和错误的排查。这里常见的方式就是增加必要的代码注释。所谓注释就是不参与代码执行的一些额外说明,仅供代码编辑人员自己阅读和了解代码的功能。

最为关键的一个就是调试代码的能力必须从实践中锻炼学习,自己不要怕麻烦,这个能力就是这样一点一点锻炼成的,可能你会觉得这样浪费多少时间,但是在这个过程中,你会发现你其实很多问题都是不清楚,一点一点解决,而且你越熟练,越能快速定位错误。

有很多读者喜欢在遇到问题的第一时间立刻问别人,这个没有问题,但是我们更建议大家先自己好好排查下,不要轻易浪费一个从实践中学习调试代码的机会。还是一句话,编程中查找错误的能力是和甚至比编程能力本身还要重要,而恰恰这一块必须通过实践才能最终掌握。

配套学习资源、慕课视频:

https://www.njcie.com/python/icon-default.png?t=M0H8https://www.njcie.com/python/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leeshuqing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值