首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序又双叒叕运行不了,就是这两个问题惹的祸!

我们在学习编程过程中多多少少会遇到这样的经历:有时候发现辛辛苦苦编写的程序运行不了,或者发现编写出来的程序达不到想象中的效果。编程的时候出现各种各样的错误和问题是难以避免的,尤其是刚接触编程的老师,看着满屏的红色英文单词无从下手,不知道是什么地方错了。今天的专题内容我们来讲讲编程中出现的错误类型和基本解决方法。

要想解决这些错误,我们首先要编程中的错误有明确的认识。编程中的错误主要可以分为2个大类,分别是:语法错误逻辑错误

语法错误和逻辑错误有什么区别呢?我们用语言来类比一下你就明白了,如果你将“你吃饭了吗?”说成了“吃饭你了吗?”,别人可能能勉强理解是什么意思,但都会感到很奇怪。这是因为这句话不符合中文的语法,这就是语法错误。什么是逻辑错误呢?举个例子,甲方对设计师说“标题颜色要五彩斑斓的黑”,这句话的每一个字都看得懂,每一个词都符合语法规范,但我们就难以理解“五彩斑斓的黑”什么意思。因为“五彩斑斓”跟“黑”是矛盾的,当甲方说出这句话的时候设计师无法理解甲方到底要的是什么,这就是逻辑错误。

编程语言的语法错误和逻辑错误跟我们语言很类似,要是我们在程序中写下语法错误或逻辑错误的语句会有什么结果呢?

我们先看一个简单的语法错误例子:

只要保存一下源码,你就会看到程序上出现了红色波浪线,并且在代码行前面出现了一个小红叉,程序不能运行。这就是错误的其中一种,叫做语法错误,也叫静态错误,在编辑器直接就能报告的错误。编程初学者容易犯的语法错误有使用了中文的符号,()少了半边,没有:等等。上面的例子就是将括号打成了中文的括号。

下面程序是牛老师在课程解答中遇到的一个真实案例,看看这个程序有什么问题。

代码其实很简单,它实现的功能是“输入年龄,然后判断年龄是否小于18,如果小于18,输出未成年,如果大于等于18,输出成年,运行一下,看到的结果却是这样的:

相信学过课程的老师都或多或少有一点排错的经验了,出现这种提示意味着程序有语法错误。程序提醒你错误出现在第3行 if age

由此可以看出,我们在点击运行的时候,编辑器会首先查看程序的语法有没有错,如果没有错,才开始执行程序,当出现语法错误时,编辑器的第一步就过不去了。通常这种错误也是比较容易找的,实在看不出来,运行一下就知道了。毕竟编辑器报错的时候会有提示,甚至会告诉你哪一行出问题了。

我们再来说说逻辑错误。逻辑错误又叫“运行时错误”,为什么叫运行时错误呢?这是因为发生这种错误的程序是可以正常运行的,只是由于某些原因,导致了程序在运行过程中报错,从而造成程序崩溃的错误。我们还是以刚才的例子来说明什么是逻辑错误:

这个例子已经修改了语法错误,看上去好像没问题,运行起来显示“请输入年龄”,看上去似乎没什么问题。我们输入17测试一下:

明明程序可以运行,为什么还是会报错呢?这个就是出现了逻辑错误。

我们来看一下这种错误是如何形成的,刚才说了程序在运行的时候会先判断有没有语法错误,然后在去执行,我们的程序能执行,就说语法是没有错误的。但是在运行的时候,因为程序是一行代码一行代码的执行,当执行到逻辑有错误的代码的时候,编译器处理不了这种有问题的逻辑,所以就会直接报错了,并且还会告诉你在哪个文件,哪一行出了问题。

那这个代码道理哪里错了呢?仔细阅读报错的内容,编译器已经告诉我们问题出在第3行,报错的内容是:

这句话的意思是

试一试,结果也是没问题的。

但逻辑错误的问题还没有彻底解决。这是因为我们知道要输入年龄,所以我们会输入数字。但程序发布后是给用户使用的,我们无法控制用户输入的内容。如果用户对程序产生了误解,输入了中文的二十二,会怎样呢?

这相当于我们要把中文字符“二十二”转换成数字,但程序并不认识中文字符。即使我们专门设计了把中文数字转成阿拉伯数字的程序也是治标不治本,只要用户捣蛋输入无意义的字符照样报错。我们需要的是,无论用户输入什么内容,我们的程序都不能报错。这时候就需要用个到Python中的一个新的技能:异常处理(也叫错误处理),专门用来处理这种运行时的错误。

异常处理是绝大多数编程语言都有的一个技术。它目的就是为了在程序出现运行时错误的时候不至于崩溃,还能继续运行,还能给用户友好的提示。我们来修改一下代码:

在这种情况下,如果用户不按要求输入数字,而输入字符的话就会出现这种效果:

程序没有没有报错,但是在输入的部分多了一句,当用户输入的是字符的时候,就会显示“请正确输入年龄,仅限数字哦”,这是给用户的友好提示。如果输入是正确的,就不会出现刚才那句话了。这样我们的效果就达到了。

我们是如何实现这个效果呢?代码修改的地方其实不多,只加了几个新的单词:try,except exception。我们用伪代码来解释一下。

看到这里其实大家能发现,我们需要做的,只是将我们认为会出异常的代码写在try的代码块里,然后通过except关键字开始捕获异常,最后给一个触发异常时候的提示就可以了。接结合伪代码和程序来看,是不是也很简单呢?

在异常处理中,异常的类别有非常多。但现阶段我们只要记住Ecxeption这个词就行,它可以涵盖所有的异常类别,只要写Ecxeption这个单词,就可以捕获所有的异常。

最后就是as这个关键字,学了turtle课程的老师门一定不陌生,我们经常用import turtle as t ,as就是别名的意思,在这里我们用e一个字母来代替上面的单词了。

最后需要跟大家说明一下,异常处理不会改变程序正常的执行流程,如果用户按照要求正常的输入,那么异常处理不会对结果有任何影响,但是一旦用户进行非法输入,这时候异常处理就会将错误捕捉,然后根据捕捉后的代码来执行了。一般情况下这里我们都会在异常处理后给用户提示,例如告诉该输入什么样的数据。

现在,你分得清语法错误和逻辑错误了吗?有的老师会问了,为什么有时候我的电脑程序运行没问题,换到学生的电脑就不能运行呢?这属于环境问题,我们以后会专门讲环境问题。明天(9月28日)牛毅昕老师将会给大家带来一门新的Python课程《Python小白成长记》,国庆学起来吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190927A0NM9X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券