0
Python鼓勵通過顯式類型檢查進行鴨子打字。但是,有時顯式檢查類型是有用的。斷言與庫API類型檢查的例外
當Python庫需要進行類型檢查時,它是否應該使用斷言或異常?
def foo(bar):
assert isinstance(bar, str)
def foo(bar):
if not isinstance(bar, str):
raise TypeError
庫的API是公共API,公共API應該明確地引發異常。但是,它不應該是圖書館做用戶輸入驗證的責任(除非它是用戶輸入驗證庫),也不期望圖書館被設計爲「不正確使用」。使用庫的程序不會捕獲TypeError異常;它將被固定爲改爲使用正確的類型調用庫API。
應該使用斷言來完成庫類型檢查而不是引發異常嗎?
我認爲'assert'應作爲一個調試/測試工具。作爲圖書館消費者,我會驚訝地發現斷言失敗。如果我嘗試'導入集合; c = collections.defaultdict(1)'我得到一個TypeError異常而不是斷言失敗;爲什麼標準庫之外的軟件包會有不同的表現? – larsks
你應該做什麼最適合你的情況。顯式類型檢查通常不是必需的,但有時它是處理某些事情的最佳方式。在這種情況下,我會推薦使用'isinstance()',這樣你就可以通過一條消息告訴用戶出了什麼問題。 – IanAuld