这是我的代码:
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
那么我该做什么呢,
谢谢
这是我的代码:
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
那么我该做什么呢,
谢谢
eval()
函数只能用于表达式。如果要执行语句,请使用 exec
函数:
exec """def fun():
print 'bbb'
"""
但在这之前,请考虑您是否真的需要动态代码。大多数情况下,没有必要使用动态代码。
fun = myFakeLocals['magic_value']
。 - ninjageckolocals()[functionName]
的方法混淆了,如果你事先不知道名称为fun
。 - ninjageckoeval
不仅仅适用于表达式; 只是 str
参数必须为表达式,但它也可以接受任意复杂度的代码对象。如果将其与 compile
混合使用,您可以评估任意代码,例如 eval(compile(mystr,'<string>', 'exec'))
运行良好(并且在 Python 2 和 Python 3 上的运行方式相同,不像 exec
)。 - ShadowRangerEval只计算表达式,而exec执行语句。
因此,您可以尝试像这样做:
a = \
'''def fun():\n
print 'bbb'
'''
exec a
fun()
def
不是表达式,它不会产生任何可分配的东西),它只是将其添加到当前作用域(如果在函数内部,则为本地作用域,否则为全局作用域,并且您可以选择传递替代的全局或本地字典)。当与字符串或以“eval”模式编译时使用时,eval
仅预计会产生有用的返回值;在“single”或“exec”模式下,它不会评估表达式。 - ShadowRanger