如何在Python的嵌入式dict中获取字典名

2024-04-26 07:51:15 发布

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

我想做一个错误列表,我可以在我用Flask构建的API中返回这些错误。由于我不知道如何在内部做到这一点,我想到了以下几点:

ERRORS = {
    'something_went_wrong': {
        'code': 1, 
        'type': 'something_went_wrong', 
        'message': 'Something went horribly wrong. Check yo self.'
    },
    'something_else_went_wrong': {
        'code': 2, 
        'type': 'something_else_went_wrong', 
        'message': 'Now something else went wrong..'
    },
}

如果我想创建一个错误响应,我只需从dict中获取错误,并将其传递给一个返回错误的函数。到目前为止还可以。我唯一不喜欢的是,我列出了typedouble。首先作为字典的键,然后作为字典中的'type'。有没有一种方法可以引用类型作为在封装字典中已知的键?你知道吗

欢迎提供所有提示;以及有关如何改进错误报告设置的提示。。:)


Tags: apiflaskmessage列表字典type错误code
2条回答

如果您确实想像这样预生成错误消息,但又不想重复使用这些文字,则可以尝试创建一个将错误存储为字段的类对象,构建一组对象并将它们添加到字典中:

class MyAPIError(object):
    error_map = {}
    def __init__(self, code, error_type, message):
          self.code = code
          self.error_type = error_type
          self.message = message
          self.error_map[error_type] = self


err1 = MyAPIError(1, "something_went_wrong", 'Something went horribly wrong. Check yo self.')
err2 = MyAPIError(2, "something_else_went_wrong", 'Now something else went wrong..')

MyAPIError.error_map
...

这样,每当您创建一个新错误时,它都会自动向类范围的映射注册自己,您不需要显式地添加它或重复文本。你知道吗

要保持结构的原样,请尝试使用helper函数,即

def printError(err_type):
    if ERRORS.has_key(err_type):
        print "Type:", err_type
        print "Message:", ERRORS[err_type].get("message")
        print "Code:", ERRORS[err_type].get("code")

因此调用printError("something_went_wrong")您将引用类型,该类型在您的字典中定义为键。你知道吗

相关问题 更多 >