我讀過有關何時使用斷言與例外,但我仍然沒有「得到它」。好像每當我覺得我是在一個情況下,我應該使用斷言,以後的發展中,我發現,我在「看之前,我的飛躍」,以確保當我打電話功能的斷言不會失敗。既然還有另外一種Python傾向於使用try-except的習慣用法,我通常最終會放棄assert並拋出異常。我還沒有找到一個恰當的地方使用斷言。任何人都可以拿出一些很好的例子嗎?在Python中使用assert的例子?
9
A
回答
20
時,其觸發裝置一錯誤代碼中的一個很好的指導使用assert
。當你的代碼假定某件事並假設時,建議使用assert
來保護這個假設。 assert
失敗意味着您的假設不正確,這意味着您的代碼不正確。
3
Generelly,斷言有沒有驗證你對自己的代碼,也就是在那個時間點的假設,無論是斷言成功,或者您的實現在某種程度上馬車。一個例外就是要發生一個錯誤,並「擁抱」它,即允許你處理它。
3
一個很好的例子是檢查函數的參數的一致性:
def f(probability_vector, positive_number):
assert sum(probability_vector) == 1., "probability vectors have to sum to 1"
assert positive_number >= 0., "positive_number should be positive"
# body of function goes here
15
+4
+1用於指出如果使用'-O'標誌調用Python,那麼斷言將被刪除。關鍵在於,如果你期望*你的代碼的行爲不同,如果你斷言,那麼你濫用它們 - 它們只用於調試。 – 2010-09-15 20:22:21
相關問題
- 1. 在python編寫的測試用例中使用assert語句
- 2. 如何在Python中正確使用(assert)?
- 3. 如何在python中使用assert和==?
- 4. 使用Assert的單元測試案例
- 5. 在消息中使用assert()
- 6. 爲什麼不在測試中使用python的assert語句?
- 7. 使用Assert Java
- 8. 什麼時候應該在Python中使用'assert'?
- 9. assert vs ==在Python中測試代碼?
- 10. 在豬中使用ASSERT時出錯
- 11. 何時在PHP中使用native assert
- 12. 在「assert」中使用switch語句(C++)
- 13. 在munit mule中使用assert-payload選項
- 14. 如何在c DLL中使用assert
- 15. 在正常代碼中使用assert
- 16. 在GoogleTest中使用ASSERT和EXPECT
- 17. 在C++中使用「assert」指針
- 18. assert的適當使用
- 19. 在Python中使用類實例的樹
- 20. Python quantlib的例子?
- 21. Base58Check Python的例子
- 22. 使用assert控制流程
- 23. JUnit - 使用錯誤Assert
- 24. 在.Net 4.5中使用Websocket的例子
- 25. 使用'super'的例子在Python2.7中
- 26. 在Angular中使用$ http.put的例子?
- 27. 哪個JUnit包在Assert上使用?
- 28. 如何使Python中的子字符串,但爲我的例子?
- 29. CUDA 5.5中的assert()
- 30. 如何在XPath 1.0中使用Schematron中的assert測試?
有趣 - 我不知道'0.'是簡寫'0.0'。 repl說它是。我可能不會在真實代碼中使用它,儘管它看起來過於「巧妙」,並且很容易被忽略。可以理解爲一個錯字,但0.0總是被理解爲一個浮點數。 – Daenyth 2010-09-15 19:42:15
這似乎與我有一個從2D矩陣中獲取元素的函數相似。斷言行和列輸入實際上在矩陣的範圍內是有意義的。但後來我做了一些事情,我拿了一個元素,想用相鄰元素做點什麼。一旦我開始對它進行編碼,當元素位於邊緣時,我不得不有特殊情況,因爲相鄰元素在矩陣之外。改用異常似乎更好。 – Colin 2010-09-15 19:46:16
異常會如何更容易修改代碼?當你改變函數的行爲時,你仍然需要修改異常提升部分,不是嗎? – pberkes 2010-09-15 19:54:36