Eval not working on multi-line string

允我心安 提交于 2019-11-28 05:06:41

问题


I am having issues with executing a multi-line string with the python eval function/

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

回答1:


eval can only evaluate Python expressions, not statements. A function definition is a statement, not an expression.

Use exec to execute Python statements.

See the Top-level components document, which differentiates (among others) between file input and expression input:

file_input ::=  (NEWLINE | statement)*

This syntax is used in the following situations:

[...]

  • when parsing a string passed to the exec statement;

and

[...] The string argument to eval() must have the following form:

eval_input ::=  expression_list NEWLINE*

Do NOT use this to execute untrusted user-supplied text. eval() and exec are not guarded against malicious users, and they can and will take over the web process if you use this.

In fact, there is no 'safe' way to ever do this, other than running the code in a throw-away virtual machine with all services firmly bolted shut. Run a new virtual machine for new code, throw away the whole VM when done or after a timeout.



来源:https://stackoverflow.com/questions/30671563/eval-not-working-on-multi-line-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!