Eval不能处理多行字符串

Joh*_*alt 3 python eval

我在使用python eval函数/执行多行字符串时遇到问题

code = ''' 

def main():
  print "this is a test"

main()

'''

eval(code)

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    eval(code)
  File "<string>", line 3
    def main():
      ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

eval只能评估Python 表达式,而不是语句.函数定义是语句,而不是表达式.

使用exec执行Python语句.

请参阅顶级组件文档,该文档区分(以及其他)文件输入表达式输入:

file_input ::=  (NEWLINE | statement)*
Run Code Online (Sandbox Code Playgroud)

此语法用于以下情况:

[...]

  • 解析传递给exec语句的字符串时;

[...]字符串参数eval()必须具有以下形式:

eval_input ::=  expression_list NEWLINE*
Run Code Online (Sandbox Code Playgroud)

千万不要用这个来执行不可信的用户提供的文本.eval()并且exec没有防范恶意用户,如果你使用它,他们可以并将接管网络进程.

事实上,没有"安全"的方法可以做到这一点,除了在一个丢弃的虚拟机中运行代码,所有服务都被牢牢地关闭.为新代码运行新虚拟机,完成后或超时后丢弃整个VM.