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()
を発生させます。いずれにしても、キーが見つからない場合にエラーを発生させたい場合は、ブラケットルックアップをもっとpythonにする必要があります。あなたの最初の質問については
あなたはそれがあなたのエラーが発生する場合は、単に
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
が発生します。
booleanコンテキストで値が 'False'の場合、' self.dictionary.get(tuple_row_column)またはself.raiseError() 'は機能しません。 – niemmi
@niemmi、優れた点、それをキャッチするための感謝! – Bahrom
私は制御フローの例外を使うことは嫌になる傾向があると思います。 –