2017-07-06 351 views
0
//database Postgresql 

logging_level_ENUM = ['critical', 'error', 'warning', 'info', 'debug'] 

loglevel = db.Column(postgresql.ENUM(logging_level_ENUM, 
        name='log_level_to_ENUM'), 
        default=logging_level_ENUM[3]) 
//python module 

if i in logging_level_ENUM: 
    print i 

这给了我一个错误“不可互换的类型:'列表'”。这是什么意思,我该如何解决这个问题?“unhashable type:'list'”错误是什么意思?

+0

什么是给出这个错误,更具体到您的问题...请阅读如何创建[最小,完整和可验证的示例](https://stackoverflow.com/help/mcve),并检查[如何提出好问题](https://stackoverflow.com/help/how-to-ask),这样你可以增加获得反馈和有用答案的机会。 – DarkCygnus

+0

固定代码缩进和修正的英文语法。 – phd

回答

0

Python列表不可散列,因为它们是可变的。您需要使用可哈希集合,而不是像元组。

logging_level_ENUM = ('critical', 'error', 'warning', 'info', 'debug')

0

基本上,当你创建一个Python dictionnary(这是在你的电话到ENUM功能最有可能发生的),键必须是可哈希的,这往往意味着收集需要是不变的(这意味着它们不应该被修改)。

这里是为什么是这样的情况下,更详细的解释:https://wiki.python.org/moin/DictionaryKeys

由于以前的答案州,你可能需要使用哈希的集合,例如一个元组解决您的示例代码的问题。