定义错误消息和错误代码的列表

时间:2012-03-14 22:50:24

标签: python exception

我想创建错误消息和相应错误代码的列表(不暗示Python List)。我有两个要求 - 能够在给定错误代码的情况下查找错误消息并且能够执行相反的查找

  1. 是否有可以实现此目的的本机python数据类型?如果没有,我该如何实现呢?
  2. BusinessRuleViolation(自定义异常类)将使用此错误消息+代码列表。我希望此列表与BusinessRuleViolation关联,不应在运行时修改。我该怎么办?

3 个答案:

答案 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具有errnostrerror属性,相应地包含错误代码和消息。

为了更方便地捕获错误,您可以为常用错误代码创建子类,例如,OSError具有子类,例如PermissionErrorFileNotFoundError

try:
    open(somefile)
except FileNotFoundError:
    # handle file not found error
except PermissionError:
    # handle permission problem

Python是一种动态语言,因此很容易以编程方式从用于错误代码,消息的当前表示中生成异常类。