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

2024-10-03 02:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个错误消息和相应错误代码的列表(并不意味着PythonList)。我有两个要求-能够查找给定错误代码的错误消息能够执行相反的查找。在

  1. 有没有一种原生python数据类型可以实现这一点?如果没有,我应该如何实现?在
  2. 这个错误消息+代码列表将由BusinessRuleViolation(一个自定义异常类)使用。我希望此列表与BusinessRuleViolation关联,并且不应在运行时进行修改。我怎么能做到呢?在

Tags: 代码消息列表错误数据类型原生错误代码pythonlist
3条回答

似乎您不需要“error message”->;“error code”映射。您可以创建一个包含错误代码和消息的异常类。它将允许在不破坏任何代码的情况下对消息进行本地化。在

例如,OSError具有errnostrerror属性,这些属性包含相应的错误代码和消息。在

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

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

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

通常,您将使用一对dicts-one将错误代码映射到消息,然后使用反向映射(通常以编程方式生成)另一个错误代码。在

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()
)

然后可以使用[]进行查找:

^{pr2}$

或者您可以只收集一组错误代码对象,因为这不太可能成为性能瓶颈:

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]

用法:

^{pr2}$

相关问题 更多 >