下面是拜讀Think Python 中關於代碼錯誤的調試方法的一些記錄,特意摘出來以便告誡自己
當你的程序不工作時,
1.首先你需要問自己這些問題:
- 有沒有什麼程序應該做卻沒有發生?找到執行該函數的代碼段,確保程序被執行。
- 有沒有什麼不應該發生的發生了?找到執行該函數的代碼段,查看它是否執行了?
- 有沒有代碼的執行效果與你期望的不同?確保你理解有問題的代碼,閱讀你調用的函數的文檔,用一些簡單的例子進 行測試。
在編程時,你心中需要有一個關於程序如何工作的模型。如果你的程序沒有按照你期望的工作,很可能問題不在於程序,而在於你心中的模型。
修正你心中的模型的最好的方法是將程序分割爲不同部分(通常是函數和方法),並分別測試。一旦你發現了模型和現實的差異,你就可以解決問題。
當然,在開發的過程中尼需要建立並測試組件。如果你遇到了問題,只有一小部分新的代碼是不確定正確性的。
我寫了一個很長的表達式,它沒有按照我期望的工作
編寫複雜的表達式是合理的,如果它們可讀。但是它們調試起來很困難。通常我們將一個
複雜的表達式分割成一系列的臨時變量的賦值。
我的函數或方法沒有按照我期望的返回
如果你的return 語句包含一個複雜的表達式,你沒有機會在返回前打印返回值。同樣你可以使用臨時變量。例如:對於
return self.hands[i].removeMatches()
你可以寫成:
count = self.hands[i].removeMatches()
return count
現在你在返回前可以打印count 的值。
我實在是卡住了,我需要幫助
第一,嘗試離開電腦幾分鐘。電腦輻射會對大腦產生影響,導致下列幾種症狀:
-
沮喪和憤怒
-
迷信的人認爲“電腦討厭我”,並神奇的相信“程序僅當我向後戴着帽子時才工作正常”。
-
隨機漫步編程(用各種可能的方法編程,並選擇工作正常的那個)。
如果你發現你有以上任意一種症狀,站起來走一走。當你心緒平靜時,思考一下程序。它
-
是做什麼的?什麼肯能造成了這種行爲?上次可以工作的程序是什麼時候?下一步做什麼?
有時找到一個錯誤很費時間。我常常在我離開電腦,讓思維遊蕩的時候找到錯誤。一些找
到錯誤最好的地方有火車上,浴室裏,以及臨睡前。
不,我真的需要幫助
即使最好的程序員也會卡住。有時你在一個程序上工作了太長的時間,因此你難以發現錯
誤。而他人可能一眼就發現問題。
在你向其他人尋求幫助前,你需要做好準備。你的程序需要儘可能簡潔,你需要最少的輸
入來重現錯誤。你需要在合適的位置加入print 語句,同時輸出應可理解。你需要能夠以
簡潔的語言描述問題。
當你想某人求助,你需要提供足夠的信息:
-
是否有出錯消息?它是什麼?指向程序的哪部分?
-
錯誤出現前你做的最後一步是什麼?你寫的最後幾行是什麼?什麼新的測試導致了錯誤?
-
你做了哪些嘗試?你學到了什麼?