我正在使用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
有什么想法吗?感谢
答案 0 :(得分:5)
在Python 3中,dict.has_key()
已经消失(并且已经被弃用了很长时间)。请改用x in my_dict
。
但是你的问题不同了。虽然您的定义显示unary
应该是字典,但回溯显示它实际上是一个函数。因此,在您未显示的代码中的某处,重新定义了unary
。
即使unary
是字典,也无法调用它。
答案 1 :(得分:1)
从您的跟踪中可以看出,您使用函数覆盖了一元的值(您是否有任何称为“一元”的函数?)。因此,您试图在一个显然没有这种方法的函数上调用“has_key”方法。注意变量名称,变量x将覆盖def x(),如果它在代码中放在它后面,反之亦然。