在方法中使用斷言是不好的做法?在方法中使用斷言 - Python
例如
def add(x, y):
assert isinstance(x, int) and isinstance(y, int)
return x + y
任何想法?
在方法中使用斷言是不好的做法?在方法中使用斷言 - Python
例如
def add(x, y):
assert isinstance(x, int) and isinstance(y, int)
return x + y
任何想法?
根本不是。
在您的示例中,如果您已經記錄了add
需要整數,那麼在該方法開始時約束此約束實際上是很好的做法。
試想一下,你有其他的選擇,以及他們如何壞的是:
add
的執行情況以獲得提示。int
- 非常糟糕的主意,用戶會不斷想知道爲什麼add(2.4,3.1)
保持返回5
。這不是,但如果你的代碼包含比你的實際代碼更多的assert語句,那麼我會生氣。
而不是使用斷言和提出斷言異常...更好地執行適當的檢查使用實例()並引發適當的TypeError。
在這樣的情況下,你不喜歡引發異常嗎?我更喜歡只在調試代碼時使用斷言。 – 2011-04-22 12:46:32
它肯定取決於場合(尤其是動態類型語言),但是異常是運行時錯誤,而斷言用於捕獲編程錯誤。如果add的文檔明確聲明它只接受'int',那麼調用者有責任保持這個約束,任何合同違規都是編程錯誤。 – 2011-04-22 12:49:12
(此外,Python中的'assert'引發了'AssertionError' - 所以它實際上是一個合成糖以引發異常)。 – 2011-04-22 12:51:44