我想创建错误消息和相应错误代码的列表(不暗示Python List
)。我有两个要求 - 能够在给定错误代码的情况下查找错误消息并且能够执行相反的查找。
答案 0 :(得分:4)
通常你会用一对dict
s - 一个映射错误代码到消息,然后用另一个(通常以编程方式生成)反向映射。
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()
)
然后您可以使用[]
进行查找:
print error_codes_to_messages[2]
print error_messages_to_codes['foo']
答案 1 :(得分:3)
或者您可能只有一组错误代码对象,因为这不太可能是性能瓶颈:
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)
答案 2 :(得分:2)
您似乎不需要“错误消息” - > “错误代码”映射。您可以创建一个包含错误代码和消息的异常类。它允许在不破坏任何代码的情况下本地化消息。
例如,OSError
具有errno
,strerror
属性,相应地包含错误代码和消息。
为了更方便地捕获错误,您可以为常用错误代码创建子类,例如,OSError
具有子类,例如PermissionError
,FileNotFoundError
:
try:
open(somefile)
except FileNotFoundError:
# handle file not found error
except PermissionError:
# handle permission problem
Python是一种动态语言,因此很容易以编程方式从用于错误代码,消息的当前表示中生成异常类。