這個故事有點笨, 希望沒人跟我一樣....
話說前一陣子申請了google的app engine, 當然是要花時間好好玩一下, 但python其實有點冷門, 用的人很少, 但google用它應該是有道理的, 就試看看吧。花了點時門看了入門說明, 想要測一下程式, 結果一開始就遇到了一些問題, 程式碼一直在某些行出現錯誤(unexpected indent), 怎麼改都一直出錯, 搞了幾個小時還沒搞定, 但直接複製sample code就OK, 被我改過就掛掉, 最後實在氣到把電腦給關了。
過了幾天才有空再開來玩, 因為我是用notepad++來編輯, 它有支援python的keyword都能自動顯示粗體or顏色, 用起來還OK, 但我突然注意到, 每個行首他都會有程式區塊的mark符號, 讓你可以簡單地分辨各個區塊(像是loop or if else等等), 但python並不用C or basic or delphi常用的 {...} or do...loop or begin...end, 而是用最原始的"縮排"來判斷, 並且縮排可用空白or Tab來做, 並不強制。
而我直接copy google的sample code來測試, sample慣用的縮排是2個空白字元, 而我改了幾個地方常常連2個縮排就用1個Tab來做(我把notepad++的Tab設成4個字元), 結果python因為它用縮排來判斷程式區塊, 以至於我有些區塊都被compiler誤判了, 當然就錯誤連連....
結論是, 如果習慣用空白來做縮排, 就請同一個檔案裡都用空白來縮排, 這樣就不會有錯, 若用Tab就全用Tab來做, 後來我是把code全改用Tab來做縮排, 終於所有的錯誤都不見啦!!!
PS: 其實第1天的錯誤訊息就講的很明白(unexpected indent), 但我明明知道它說indent, 但在notepad++裡空白和tab看起來就都完全一個樣呀!!! 除非你把文字游標走過去才能發現.....