eval函数的第二个参数与第三个参数有何不同?

时间:2010-10-29 03:44:25

标签: python

class all_items(dict):
    def __getitem__(self, key):
       return 1

>>> eval("undefined",dict(),all_items())
1
>>> eval("undefined",all_items(),dict())
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    eval("undefined",all_items(),dict())
  File "<string>", line 1, in <module>
NameError: name 'undefined' is not defined

字典的all_items类应该为任何值返回1。使用 eval 函数,我希望“undefined”计算为1,即使它没有定义。当all_items字典是eval语句的第三个参数时,这种方法有效,但当它是第二个参数时则不行。我的问题是为什么第二个评估不能评估为1? (我怎么能让它工作?)我正在使用Python 2.5。

1 个答案:

答案 0 :(得分:3)

第二个参数must be a dictionary。实现映射协议是不够的。