【问题标题】:eval(): can't assign to function calleval():不能分配给函数调用
【发布时间】:2014-05-23 19:22:45
【问题描述】:

我的 cookie 点击器还有一个问题... 这是我编写的产生错误的代码:

cps=cps+bcps[buych]
c=c-bprice[buych]
eval(buych)=eval(buych)+1

cps 是一个变量,
c 是一个变量,
b1,b2,b3,b4,b5 是变量
buych 是一个字符串(我从 input() 命令获得)
bcps 和 bprice 是地图(如下所示)

bcps = {"b1":'1',
    "b2":'5',
    "b3":'10',
    "b4":'20',
    "b5":'25'}
bprice = {"b1":'10',
    "b2":'20',
    "b3":'30',
    "b4":'40',
    "b5":'50'}

所以,我想要实现的是:
- 取输入的字符串值,将是'b1','b2', 'b3', 'b4', 'b5'
-在 bcps 内增加 cps 购买它的价值
-在 bprice 内将 c 的值减小
- 使用 eval 将 'b#' 转换为 b#
- 将 b# 增加 1

运行脚本时,我在 python shell 中没有收到错误文本。相反,我得到一个弹出窗口,上面写着“无法分配给函数调用”。错误突出显示为 eval() 之前的第一个空格。我真的不明白,因为我在错误中没有任何功能。

感谢阅读,
饼干怪兽

【问题讨论】:

  • eval() 是一个函数。您正在尝试分配给调用eval(buych) 的结果。
  • 呵呵,没意识到。我是否将 eval 的结果转换为其他内容?
  • 想象一下,如果代码被简化了,比如eval(..)f(),那么得到的简化代码是f()=f(),这将因为完全相同的原因不起作用:函数不是变量/ properties 和 cannot 用于赋值运算符的左侧。但是,不要为此使用 eval - 对于此分配,只需 忘记 它存在。而是通过按键访问字典(“地图”)。

标签: eval python-3.2


【解决方案1】:

eval(buych) 是一个函数调用——你正在调用函数eval()。只能赋值给变量,不能赋值给函数的结果。

您需要将变量连接成一个有效的赋值表达式,然后exec 即:

exec(buych + '=' + buych + '+1')

eval 用于计算表达式,你必须使用exec 来执行整个语句。

但是,如果您发现自己需要这样做,那么您通常是在做错事。您应该使用列表或字典,而不是计算变量名称和表达式,以便您可以使用索引或键来引用它们。

【讨论】:

  • eval 似乎不支持带有 '=' 的语句。我认为我们宁愿使用exec 而不是eval
  • @DakshShah 谢谢,已修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2015-02-06
  • 2014-08-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多