为什么会这样?在
>>> eval(str(17*3))
51
>>> t=17;t*3
51
>>> eval(str(t=17;t*3))
File "<stdin>", line 1
eval(str(t=17;t*3))
^
SyntaxError: invalid syntax
>>>
有没有办法发送eval()变量?在
^{pr2}$我应该更精确地说,我想一旦我得到一个好的答案,它将是普遍的。但是,这是我尝试@cnicutar建议的实际用例。在
>>> z=input("ins: ");y=eval(z);print(y)
ins: 't*13+q', {'q':4,'t':2}
('t*13+q', {'q': 4, 't': 2})
>>>
尝试@LtWorf和@Ghopper21的实现。在
是的,您可以使用字典作为第二个(和第三个)参数发送
eval
变量。这些参数被记录为here。下面是你的例子:顺便说一句,您得到的具体错误并不是因为
^{2}$eval
不能将赋值变量的语句作为它的第一个参数(尽管它确实不能);而是因为str
的参数需要是一个表达式,它不能赋值变量,而不是一个可以赋值的语句。请注意,str
也会出现相同的错误:编辑:对于您的特定用例,您遇到的问题是输入字符串
获取(由
input
,它读入一个字符串并对其调用eval
)到所谓的“元组”,即多个表达式的组合到一个表达式中,这是由于逗号的存在。你不能计算元组。(您的用例示例实际上应该返回一个错误——不确定为什么不返回。)要解决这个问题,您需要“解包”元组,以便}
eval
知道元组的哪个部分是您要计算的表达式(第一部分,使用字符串表达式t*13+q
,即z[0]
),而哪个是变量值字典(第二部分,使用字典{'q':4,'t':2}
,即z[1]
),即用y=eval(z)
替换{或者,您可以告诉Python使用星号语法自动将元组解压为一个函数的连续参数,即将
y=eval(z)
替换为您还可以:
尝试使用
compile
:相关问题 更多 >
编程相关推荐