使用python检查字典中是否存在键时的AttributeError

时间:2012-04-13 19:07:31

标签: python attributeerror

我正在使用Python 2.7.2+,当我试图查看字典是否包含给定的字符串值(名为func)时,我得到了这个异常:

Traceback (most recent call last):
  File "Translator.py", line 125, in <module>
    elif type == Parser.C_ARITHMETIC : parseFunc()
  File "Translator.py", line 95, in parseFunc
    if unary.has_key(func) : 
AttributeError: 'function' object has no attribute 'has_key'

这是我定义词典的地方:

binary = {"add":'+', "sub":'-', "and":'&', "or":'|'}
relational = {"eq":"JEQ" , "lt":"JLT", "gt":"JGT"}
unary = {"neg":'-'}

这是引发异常的函数:

def parseFunc():
    func = parser.arg1 
    print func  
    output.write("//pop to var1" + endLine)
    pop(var1)
    if unary.has_key(func) : // LINE 95
        unary()
        return
    output.write("//pop to var2" + endLine)
    pop(var2)
    result = "//"+func + endLine
    result += "@" + var1 + endLine
    result += "D=M" + endLine
    result += "@" + var2 + endLine
    output.write(result)
    if binary.has_key(func) : 
        binary()
    else : relational()

此外,我尝试将if unary.has_key(func)更改为if func in unary,但后来又

Traceback (most recent call last):
  File "Translator.py", line 126, in <module>
    elif type == Parser.C_ARITHMETIC : parseFunc()
  File "Translator.py", line 95, in parseFunc
    if func in unary:
TypeError: argument of type 'function' is not iterable

P.s我也厌倦了使用python 3.2

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:5)

在Python 3中,dict.has_key()已经消失(并且已经被弃用了很长时间)。请改用x in my_dict

但是你的问题不同了。虽然您的定义显示unary应该是字典,但回溯显示它实际上是一个函数。因此,在您未显示的代码中的某处,重新定义了unary

即使unary是字典,也无法调用它。

答案 1 :(得分:1)

从您的跟踪中可以看出,您使用函数覆盖了一元的值(您是否有任何称为“一元”的函数?)。因此,您试图在一个显然没有这种方法的函数上调用“has_key”方法。注意变量名称,变量x将覆盖def x(),如果它在代码中放在它后面,反之亦然。