这是我的代码:
a = \
'''def fun():\n
print 'bbb'
'''
eval(a)
fun()
但它显示错误:
Traceback (most recent call last):
File "c.py", line 8, in <module>
eval(a)
File "<string>", line 1
def fun():
^
SyntaxError: invalid syntax
所以我该怎么做,
感谢
答案 0 :(得分:13)
eval()
仅适用于表达式。如果要执行语句,请使用exec
:
exec """def fun():
print 'bbb'
"""
但在此之前,请考虑一下您是否真的需要动态代码。到目前为止,大多数事情都可以不用。
答案 1 :(得分:3)
Eval仅计算表达式,而exec执行语句。
所以你尝试这样的事情
a = \
'''def fun():\n
print 'bbb'
'''
exec a
fun()
答案 2 :(得分:2)
非表达式eval
参数必须是compile
- 首先; str
仅作为表达式处理,因此完整语句和任意代码需要compile
。
如果您将其与compile
混合使用,则可以eval
任意代码,例如:
eval(compile('''def fun():
print 'bbb'
''', '<string>', 'exec'))
上述工作正常,在Python 2和Python 3上的工作方式相同,与exec
(Py2中的关键字和Py3中的函数)不同。
答案 3 :(得分:1)
如果您的逻辑非常简单(即一行),您可以评估一个lambda
表达式:
a = eval("lambda x: print('hello {0}'.format(x))")
a("world") # prints "hello world"
正如其他人所提到的,如果可以,可能会best to avoid eval
。