讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 1.7 如果出問題 >

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。——編者注