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
我认为使用控制流的异常往往会被忽视。 –