self.dictionary.get(tuple_row_column, self.raiseError())
- 有一種方法,以提高錯誤而不定義將手動引發錯誤的方法?
- 即使字典包含密鑰,也會調用self.raiseError()方法。這是爲什麼?
self.dictionary.get(tuple_row_column, self.raiseError())
這是因爲.get
首先評估默認參數,因爲它需要知道在缺少密鑰的情況下要返回什麼。正如註釋中指出的那樣 - 如果您的字典包含任何其布爾值計算爲False
(如空字符串,0,False,[]等)的任何內容,則此方法將引發錯誤self.dictionary.get(tuple_row_column) or self.raiseError()
;無論哪種方式,如果你想提出一個錯誤,如果有一個缺失的關鍵,支架查找更pythonic。
關於第一個問題,你可以只是做
self.dictionary[tuple_row_column] # Raises KeyError if tuple_row_column not present in dictionary keys.
如果你想要提高你的錯誤,你可以說:
try:
self.dictionary[tuple_row_column]
except KeyError:
self.raiseError()
Python是嚴格的評估,這意味着所有的函數調用的參數在之前被評估爲,該函數被調用。因此self.raiseError()
必須運行,無論是否需要(與非嚴格或「懶惰」的語言沒有此限制)。
如果您使用的下標,而不是get
:
self.dictionary[tuple_row_column]
這將提高KeyError
如果沒有映射。
如果在布爾上下文中值爲False,則self.dictionary.get(tuple_row_column)或self.raiseError()不起作用 – niemmi
@niemmi,非常好的一點,感謝您的支持! – Bahrom
我認爲使用控制流的異常往往會被忽視。 –