それとも、これがパフォーマンスのボトルネックになる可能性はほとんどありませんので、あなただけの、エラーコードオブジェクトのコレクションを持つことができます::
error_codes_to_messages = {
1: 'foo',
2: 'bar',
3: 'baz',
}
error_messages_to_codes = dict(
(v,k) for k,v in error_codes_to_messages.iteritems()
)
その後、[]
で検索を行うことができます
errors = [Error1, Error2, Error3, ...]
def lookupError(number=None, text=None, matcher=None, multiple=False):
if number!=None:
matcher = lambda x:x.number==number
if text!=None:
matcher = lambda x:text in x.text
results = [e for e in errors if matcher(e)]
if multiple:
return results
else:
assert len(results)==1, 'Error lookup failed, expected one error but got {}'.format(results)
return results[0]
使用法:
>>> lookupError(number=5)
>>> lookupError(text='index')
>>> lookupError(matcher=lambda x:x.context==StartupSequence)
なぜエラーメッセージが表示されたらエラーコードを見つける必要がありますか?メッセージはどこから来たのですか? – jfs
@ J.F.Sebastian - エラーメッセージ、コード、およびメッセージとコードの関連付けはすべて自己定義されています。エラーメッセージは、カスタム例外クラス、BusinessRuleViolationによって使用されます。私はユニットテストで 'assertRaisesRegexp'を使用するためにエラーコードを使用して対応するエラーメッセージを取得する予定です。 – tamakisquare
@ J.F.Sebastian - 私の前のコメントに追加するだけです。私はエラーメッセージの文言が後で変更されることを知っているので、私はこのアプローチをとっています。私はこの瞬間に彼らの言葉遣いを心配する時間を費やすつもりはないからです。 – tamakisquare