首页 » 父与子的编程之旅:与小卡特一起学Python » 父与子的编程之旅:与小卡特一起学Python全文在线阅读

《父与子的编程之旅:与小卡特一起学Python》1.7 如果出问题

关灯直达底部

如果程序中出现错误无法运行,怎么办呢?可能会发生两种不同类型的错误。下面就来了解这两种错误,这样无论遇到哪一种错误你都能知道如何应对。

语法错误

IDLE 在尝试运行程序前会对程序做一些检查。如果 IDLE 发现一个错误,这往往是一个语法错误(syntax error)。语法就是一种编程语言的拼写和文法规则,所以出现语法错误意味着你键入的某个内容不是正确的 Python 代码。

下面给出一个例子:

这里在 printBye 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。——编者注