你会在编程过程中遇到很多错误 (名为漏洞)。理解这些错误产生的原因,以及解决方法在编程中尤为重要。Python会严格按照你写的代码运行,但如果它理解不了你所写的东西,程序就不会运行。同样的道理,Python会提示你哪个地方会出错,帮助你修正程序。
以下是两种Python错误。
在第一个例子中,我们忘了在 print 后面的内容上加上圆括 号,正确形式为 Print (…)。 Python 无法理解这样错误的代码。
这是第二个例子。
在第二个例子中,我们没有定义 greeting
变量。Python知道你要做什么,但是因为 greeting
没有被定义,所以错误出现了。
当Python不理解程序时,syntax error (句法错 误)会出现。当Python理解程序,但是在运行时出现问题时,run-time error (运行时 错误)会出现。
在英语中,句法错误 就像是说
Please cat dog monkey.
这句话的语法是错的。从英语语法角度讲,缺少一个动词。导致你不知道该做什么。句法与语法相似。
在英语中,运行时错误就像是说
Please eat the piano.
这个句子从语法角度说是对的 - 有动词,有名词,位置也对 - 所以你能理解要做什么。但是,在你执行吃钢琴的这个指令时会出现问题(除非你是一只白蚁)。这个错误叫做运行时错误因为它在这个程序运行后出现。
我们会在结束的时候讨论逻辑错误,逻辑错误是指程序可以正常运行,但是会输出错误的结果。比如说,
Please close the back door so that the bugs don't come in.
如果front door是打开的,这就是一个逻辑错误:漏洞 here should be 虫子
常见的Python语法错误
以下是一些额外的句法错误例子。其中一个很常见的是当Python发现了一个本不该有的符号。
Python会显示SyntaxError: invalid syntax
and points with ^
to the exclamation point.原因是 !
在Python中无意义。如果我们输入print("Hello, World!")
,程序就正确了,因为这时Python就会明白!
是Hello, World
的一部分文本。
这里还有另一个更加不易察觉 的语句错误。
在Python中,class
是一个特别的词语。如果你写了course
而不是class还好。点击此处来查看Python中所有的特殊“关键词”。
如果你在文本两边只加了一个双引号,或者只用了一个单括号,你会得到以下句法错误:
在这个例子里,EOL是End Of Line的缩写:Python需要另一个"
但是这一行内没有。
同样,EOF是End Of File的缩写:Python需要)
但是程序内没有。
有时看似相近的两个句法错误其实会有不同的错误提示。但不管怎样,错误提示都是为了帮助你改正代码。
运行时错误
以下是一些常见的运行时错误。Python能理解程序指令,但是运行时出了问题。
- 使用未定义的变量或方程。如果随意篡改大小写,这种错误就会发生:
- 除以0。数学角度上是错误的。(为什么?因为0乘任何数都是0,所以 1 = X * 0无解,所以 1/0 无意义)
- 代码类别不符
随着我们学习的深入,会有更多的Python句法错误。
从技术角度来看,句法错误和运行时错误有什么区别呢?下面我们一起来比较一下他们。观察每个程序的输出。
会出现运行时错误的程序会有输出,而出现句法错误的程序不会输出。这是因为Python运行是分两步走的:
所以,一个句法错误的程序根本不会运行,但是一个运行时错误的程序会运行,直到错误出现。
|
逻辑错误
程序也可以成功运行(不出现句法或运行时错误)但是做的事情可能不对。比如,你可能想要一个可以计算两个数平均值的程序:x和y的平均值的定义为
为什么这个程序不对呢?
平均值应该是
但是程序运行结果是5.0
!这次错误是关于算数中“运行顺序”的问题。当你输入x + y / 2
的时候,从数学的角度上讲等同于。修正这个东西,第三行程序应该被写成average = (x + y) / 2
,以告诉Python我们真正想要的是,先进行加法,在进行除法。
逻辑错误出现的原因是错误地设计了程序,或者是因为写的代码表达的意思与设计本意不符(比如平均值
这个例子)。逻辑错误很难被发现,尤其是在一个很长的程序中,但随着你编程经验的累计,你会更擅长避开这些逻辑错误。第6D课会给一些帮助你规避这些逻辑错误的建议。
练习
到此为止这一节课的知识就讲解完了,下面是一些有关调试的练习题(修正程序中的漏洞)。你可以试着在程序运行前查找 并修正错误,或者先运行程序 然后通过程序提示来进行修正。
每一个程序都是已经写好的代码。你只需要改几个字符(字母/符号/数字)来修正每个程序。系统拒绝评判更改太多字符的程序。如果想要将程序至原始程序,点击重置程序。 |
当你完成以上练习题后,进入下一课的学习吧!