如果程序中出现错误无法运行,怎么办呢?可能会发生两种不同类型的错误。下面就来了解这两种错误,这样无论遇到哪一种错误你都能知道如何应对。
语法错误
IDLE 在尝试运行程序前会对程序做一些检查。如果 IDLE 发现一个错误,这往往是一个语法错误(syntax error)。语法就是一种编程语言的拼写和文法规则,所以出现语法错误意味着你键入的某个内容不是正确的 Python 代码。
下面给出一个例子:
这里在 print
和 Bye for now!"
之间漏了一个引号。
如果运行这个程序,IDLE 会弹出一个消息“There's an error in your program: invalid syntax.”,意思是说你的程序中有一个错误,语法不正确。你必须查看代码,找出哪里出了问题。IDLE 的编辑器会(用红色)突出显示它认为出错的位置。也许问题不会恰好出现在红色显示的位置,不过应该很接近。
运行时错误
可能发生的第二种错误是运行程序之前 Python(或 IDLE)无法检测出来的错误。这种错误只是在程序运行时才会发生,所以被称为运行时错误(runtime error)。下面是程序中出现运行时错误的例子:
print "Hello, and welcome to Python!"print "I hope you will enjoy learning to program."print "Bye for now!" + 5
如果保存这个程序,并试图运行,程序确实会开始运行。前两行会打印出来,但是接下来你会得到一个错误消息:
Traceback 开头的代码行表示错误消息开始。下一行指出哪里发生了错误,这里会给出文件名和行号。然后显示出错的代码行,这可以帮助你找到代码中哪里出了问题。错误消息的最后一部分会告诉你 Python 认为存在什么问题。对编程和 Python 有了更多了解之后,就更容易理解这个消息是什么意思了。
听我说,卡特,这有点像将苹果和鳄鱼放在一起。
在 Python 中,不能把两个完全不同的东西加在一起,比如说数字和文本。正是因为这个原因,print "Bye for now!" + 5
会给出错误消息。这就像是在说:“5 个苹果加 3 只鳄鱼是多少?”结果是 8,但是 8 个什么呢?把这些东西加在一起没有任何意义。不过几乎所有东西都可以乘以一个数来翻倍。(如果有两只鳄鱼,再乘以 5,那你就会有 10 只鳄鱼!)正因如此,print "Bye for now!" * 5
是可以的。
像程序员一样思考
看到错误消息也不用担心。它们只是为了帮助你找出哪里出了问题,以便你改正错误。如果程序中确实出了问题,你肯定更希望看到错误消息。没有给出任何错误消息的 bug 1 才更难找到!
1bug,意思是“臭虫”。程序员通常把讨厌的错误说成 bug。——编者注