以下摘錄自《Think Python》第六章:有返回值的函數(shù)中的調(diào)試一節(jié)麦锯。詳見:http://www.codingpy.com/books/thinkpython2/06-fruitful-functions.html#factdebug
將一個(gè)大程序分解為較小的函數(shù)為調(diào)試生成了自然的檢查點(diǎn)棵介。 如果一個(gè)函數(shù)不如預(yù)期的運(yùn)行镇眷,有三個(gè)可能性需要考慮:
- 該函數(shù)獲得的實(shí)參有些問(wèn)題,違反先決條件吠各。
- 該函數(shù)有些問(wèn)題臀突,違反后置條件。
- 返回值或者它的使用方法有問(wèn)題贾漏。
為了排除第一種可能候学,你可以在函數(shù)的開始增加一條 print
語(yǔ)句來(lái)打印形參的值(也可以是它們的類型)。 或者你可以寫代碼來(lái)顯示地檢查先決條件纵散。
如果形參看起來(lái)沒(méi)問(wèn)題梳码,就在每個(gè) return
語(yǔ)句之前增加一條 print
語(yǔ)句,來(lái)打印返回值伍掀。 如果可能掰茶,手工檢查結(jié)果。 考慮用一些容易檢查的值來(lái)調(diào)用該函數(shù)(類似在增量式開發(fā) 一節(jié)中那樣)蜜笤。
如果該函數(shù)看起來(lái)正常工作濒蒋,則檢查函數(shù)調(diào)用,確保返回值被正確的使用(或者的確被使用了0淹谩)沪伙。
在一個(gè)函數(shù)的開始和結(jié)尾處增加打印語(yǔ)句,可以使執(zhí)行流程更明顯县好。