Python

聊一聊DEBUG

2021-12-03  本文已影响0人  虽然菜

        我们在学习写代码的时候经常会出现各种各样的错误。往往这个时候,很多同学会手足无措,抓耳挠腮,心里头这个急呀!但是我们就是找不出来错!上火,脑阔疼。

改bug

        计算机领域有一个词,叫做“BUG”,指计算机上存在的漏洞。这个词的由来也有一个故事:

        为马克2号(Harvard Mark II)编制程序的葛丽丝·霍波(Grace Hopper)是一位美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一,有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为BUG(飞虫),把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。

        BUG指的是漏洞,但是我们平时出现的错误其实还不够BUG的级别,很多都是代码运行不起来。这种运行不起来的错误叫BUG可有点对不起BUG哦。

        今天老师就来给同学们讲一讲常见的错误类型以及如何排查这些错误。

        一、语法类型的错误

        语法类型的错误指的是代码写的不对,编译器或解译器在词法分析时无法将其转换为适当的编程语言。语法错误其实是最好排查的错误,但是对于很多同学来说,又是最难的。

        为什么这么说呢,有句话叫“难者不会,会者不难”。这就尤其体现出方法的重要性。

        请同学们一定注意,当你遇到难的东西的时候,恰恰是你需要改进方法,马上会有进步的时候!

        回到语法错误上面来。广义上来说,所有可以看到错误提示的我们都可以称之为语法出错误,比如:

        错误的提示太多,这里我们就不一一列举了。

        狭义上,语法错误就特指:

语法错误

        在遇到语法错误的时候,我们可以使用下面的几个步骤来进行排查:

        第一步:翻译错误

        想要搞清楚错误的原因,首先要明白这个错误是啥意思呀,但是报错信息一般都是用英文给出的,所以要翻译一下。错误提示,我们一般都只需要在错误中找到Error,然后翻译Error后面的内容,Error后面给出的就是错误原因提示。

        这里要强调一点的是,翻译错误不是把这句话复制到百度里查,而是翻译:

        请同学们习惯翻译错误。不论是理解汉语还是理解英语,亦或者其他语言,都是先明白词的意思,再把词意连起来理解。所以这其实也是锻炼同学们语言理解能力的过程。

        上面两个错误,根据词意理解,其实都是变量没有定义。不同的是,turtle是Python中的库文件,所以要找导入库的问题。a是一个变量,所以要定义变量。

        切忌偷懒直接查百度,这乃是缘木求鱼的行为!

        第二步:定位问题

        错误提示已经给出了足够的信息来帮我们定位问题所在,在理解了错误的意思后,我们通常需要看这两点:错误在哪一行出错的是哪个词

Python C++

        以上两步,绝大多数的语法错误都是可以找出来的。

        二、功能性的错误——BUG        

        功能性的错误就真的让人头疼了,首先代码没有错,可以运行,但是呢,结果不对;我整个人都不好了。

        对于这一类的错误来说,我们有一个虽然笨,但是往往有效的方法——代值看数据

        下面举的这两个例子很简单,有经验的同学一眼就可以看出来,但是请同学们注意,不管你有没有看出来错误原因,我重点讲的是排查错误的方法,不论你有没有看出错误,请把排查错误的具体过程看完整。

        先来看C++:

        这段代码要是提交的话,妥妥的答案错误。怎么办呢,我们给每行代码后面加个输出,看下具体的值:

排错的代码

        我输入2.5的话, 输出的结果是:

输出的结果

        观察输出可以发现,radius的值就已经是错误的了,点5没了。这时我们就可以定位出,问题出在小数上。再看代码,其实是类型错误。所以要把int 改成float。

        Python

        看下面的Python代码,这段代码的作用是判断一个数是不是偶数

        这段代码是很多同学会出现的错误。判断偶数,但是怎么判断都不对。比如输入一个4,输出的却是“不是偶数”。这个时候,我们就要学会输出判断的值,注意添加的这行代码及对应的输出。

        我们发现n/2得到的是2.0。这里其实是要用取余%。

        总结:

        回顾DEBUG的过程,其第一步都是在搞清楚我们所写的代码中,每一行代码具体是什么,起到了什么作用。这是使用元认知的方式来认识我们所写的代码和学习的知识。

上一篇 下一篇

猜你喜欢

热点阅读