對於 Python 程式,有哪些技巧 經驗可以讓錯誤提早發生?

時間 2021-05-11 18:41:25

1樓:

大家都提到的 assert,對於程式邏輯正確的前提、假設,都用 assert 驗證。

還有沈大俠提出:不要去捕獲 AttributeError。

衍生:KeyError(假設字典中有這個 key,就用下標訪問這個陣列而不是用 get 方法,並不要捕獲 KeyError)

2樓:Inside

說乙個我長期實踐的技巧。

基本原則:輸入控制。

coding的時候銘記強烈不信任任何輸入,假設我是乙個function的作者,只要呼叫者給我的引數有一點點不符合我的期待,立即賞他個異常。

至於賞他個什麼樣的異常,就還需要乙個決策:

1、輸入錯誤是業務相關的,例如email的格式錯了,那麼會給出乙個詳細的自定義異常(類似EmailAddrError)並伴隨詳細的異常說明,由呼叫者自行處理。

2、輸入錯誤是業務無關的,例如「大哥,我需要的是乙個list,你給我個scalar是個啥意思」,這種輸入錯誤只在開發者之間可見,跟業務、使用者完全沒關係,那麼乙個簡單的assert即可,不需要太詳細的說明(浪費時間),因為這種錯誤很容易識別而且就是要明顯的提醒呼叫這個function的同伴。

這樣做的好處是,所有的輸入錯誤都會很快暴露(如果沒預料到錯誤可能會發生並做了異常處理的話)。如果要改變引數約定,只要寫下新的assert或者自定義異常,如此這個function被不符合新約定的呼叫一碰就錯,很好的滿足了提早暴露錯誤的要求。

在這種實踐下,assert不需要處理,就是要讓它錯,所以我不同意楊崑對斷言的理解。

補充一下,我現在不用assert了來幹前面說的提醒同伴給正確的引數這種事情了,因為我寫了個簡單的check方法來幹這事,能控制得更精細一點。

3樓:「已登出」

補充前面的就是,每個自模組完全信任上層呼叫的輸入,自模組不用try catch而多assert,就是盡量吧邏輯錯誤變成執行時錯誤。另外python建議的duck type這要看你設計的如何了

除錯程式有哪些技巧?

codedump 寫了一篇關於除錯的文章,比較長,就只把位址貼出來 codedump 在我看來,除錯不僅涉及到方法,還牽扯到態度,而態度,又決定了你以後的成長。 黃偉 在linux 上除錯工具 strace ltrace gdb valgrind 和網路有關的工具netstat tcpdump等 基...

學python有技巧嗎?

再見傑克 零基礎學習Python必須明確的幾點 1.明確你將來是做什麼工作的,需要掌握哪些技能,很多人連這個就不知道就盲目的學,你首先清楚,現在公司需要什麼人才,你應該奔著什麼目標努力。Python的學習方向有很多,主要還是web。2.系統的學習規劃,規劃好你每天學習的新知識和每天做的作業和練習,很...

殺人遊戲中哪些技巧和理念對於狼人殺有幫助呢?

名廚 艾莉 殺人遊戲和狼人殺看起來很相似,實則完全不同。狼人殺相比殺人遊戲,更傾向於推理,更適合面殺 別問我為什麼,我試過和同學面殺殺人遊戲,一局20人有15個不同的身份,第乙個晚上的結算就用了10分鐘 狼人殺基本上聽發言,盤邏輯。殺人遊戲則是順跳,盲狙,先。相比之下殺人遊戲的節奏是非常快的 網殺 ...