[python]bug和debug
bug:代碼中存在的語法或者邏輯問題
debug:自查和解決代碼中的問題
(coding五分鐘,debug兩小時)
一、出現bug原因的四大類型
1、粗心
1)錯誤案例
上面這個錯誤就是因為 if語句少了【英文冒號】
1)分析問題:
仔細看報錯,其中有3個關鍵信息。
(1)line 2
代表這個bug出現在第2行,所以,我們在Debug的時候,可以優先從第2行開始檢查
(2)^
代表bug發生的位置,這裏指出的位置是第二行末尾。
(3)這一行寫的是錯誤類型,SyntaxError
指的是語法錯誤。
(如果不知道報錯信息的中文意思,可以把錯誤信息復制到百度去搜索)
2)總結容易錯的地方(初學者的自檢清單)
2、知識不熟練
1)錯誤案例
該代碼的目的是取出列表中的‘星期日‘
2)分析問題
錯誤原因:忘記了列表的索引是從0而不是從1開始的
從報錯信息也可以看出:下表越界
啟示:當你發現知識點記不清或者不能確定的時候,就要及時復習或者上網搜索。不要強行寫出自己不敢確定的代碼,這種情況往往容易出錯。如果對某個基礎知識點沒有熟練的掌握,隨著往後知識廣度、深度以及項目難度的增加,很可能會增加大量的理解成本,所以多復習、多練習總是沒有錯滴。
3、思路不清
思路不清指的是當我們解決比較復雜的問題時,由於我們對細節和實現手段思考得不夠清楚,要麽導致一步錯,步步錯;要麽雖然沒有報錯,但是程序沒有達到我們想要的效
1)錯誤案例
功能:輸入出演者姓名,即可輸出他出演的電影,錯誤代碼如下
運行後發現此代碼不能實現想要的功能
2)分析問題
解決思路不清的工具
1)遇到關鍵步驟時print出來,看是否達到我們所期望的結果,以此來揪出錯誤的那一步。
通過打印發現,取出來的都是字典的鍵
正確的代碼
3)總結
4、被動掉坑
被動掉坑,是指有時候你的代碼邏輯上並沒有錯,但可能因為用戶的錯誤操作或者是一些“例外情況”而導致程序崩潰。
我們舉個例子,當運行以下代碼的時候,如果輸入的東西不是數字,則程序一定會報錯。
“ValueError”的意思是“傳入無效的參數”。因為,int()函數不能接受非數字的字符串。
2)分析並解決問題
Python給我們提供了一種異常處理的機制,可以在異常出現時即時捕獲,然後內部消化掉,讓程序繼續運行。
try---except語法
多個異常的寫法:
如
try: # 嘗試執行下列代碼
XXXXX
except (ZeroDivisionError,TypeError):
XXXXXX
捕獲異常後的代碼
案例2
代碼要點有兩個:
(1)因為不知道用戶什麽時候才會輸入正確,所以設置while循環來接受輸入,只要用戶輸入不是數字就會一直循環,輸入了數字就break跳出循環。
(2)使用try……except……語句,當用戶輸錯的時候會給予提示。
關於Python的所有報錯類型,有需要的話可以在這裏查閱:https://www.runoob.com/python/python-exceptions.html
案例3:
補充;
關於更多異常可參考 https://segmentfault.com/a/1190000007736783
[python]bug和debug