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

时间:2014-10-29 10:52:01

标签: python dictionary error-handling flask

我想列出一些错误列表,我可以在我使用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获取错误,并将其传递给返回错误的函数。这到目前为止工作正常。我唯一不喜欢的是,我列出了type双倍。首先是字典的关键字,后来是字典中的'type'。有没有办法将类型引用为封装字典中已知的键?

欢迎所有提示;还有关于如何改进我的错误报告设置.. :)

2 个答案:

答案 0 :(得分:2)

为保持结构不变,请尝试使用辅助函数,即

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")将引用类型,即在词典中定义为键。

答案 1 :(得分:0)

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

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
...

这样,无论何时创建新错误,它都会自动将其自身注册到类范围的映射中,您无需显式添加它,也不需要重复文字。