a='''b="ddd"'''
eval(repr(a))
print str(a)
print b
请尝试使用代码,而不是文字,因为我的英语不是很好,谢谢
答案 0 :(得分:3)
使用:
eval(compile(a,'<string>','exec'))
而不是:
eval(repr(a))
文稿:
>>> a='''b="ddd"'''
>>> eval(compile(a,'<string>','exec'))
>>> print str(a)
b="ddd"
>>> print b
ddd
问题在于您实际执行的语句'b="ddd"'
不是b
的赋值,而是对字符串的求值。
{1}}内置函数,在给定字符串时,将其计算为表达式(不是语句)并返回结果。您可以通过为代码对象提供eval()
来运行非表达式代码,我们使用上面的eval()
创建代码对象。在这种情况下,它运行代码并返回compile()
。
如果您输入以下内容,您可以看到类似的效果:
None
显然>>> 'c=7'
'c=7'
>>> c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined
>>> c=7
>>> c
7
>>> '7=d'
'7=d'
>>> 7=d
File "<stdin>", line 1
SyntaxError: can't assign to literal
不是有效的Python,但7=d
是由于上面解释的原因。
'7=d'
,expr()
和repr()
内置插件的说明已经找到here,足以解决这个问题。在做出这个答案时,没有任何内置插件受到伤害。
答案 1 :(得分:2)
eval用于评估(获得结果)表达式。你想要的是动态执行Python代码,这是通过exec完成的:
>>> a='''b="ddd"'''
>>> exec(a)
>>> print b
ddd
另请注意,在将字符串传递给任一函数之前,不应调用repr()。你已经有了一个字符串,调用repr()会创建一个字符串的字符串表示。
答案 2 :(得分:0)
重新考虑您是否真的需要使用eval()
。例如,您可以像这样使用globals()
:
>>> globals()['b'] = 'ddd'
>>> print b
ddd
但也许您应该使用的只是 dictionary :
>>> my_namespace = dict()
>>> my_namespace['b'] = 'ddd'
>>> my_namespace
{'b': 'ddd'}
>>> print my_namespace['b']
ddd