评估不适用于多行字符串

发布于 2021-01-29 14:09:59

我在使用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
关注者
0
被浏览
169
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    使用exec执行Python语句。

    请参阅“ 顶层组件”
    文档
    ,该文档
    文件输入

    表达式输入
    之间进行区分(其中包括):

    file_input ::=  (NEWLINE | statement)*
    

    在以下情况下使用此语法:

    […]

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

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

    eval_input ::=  expression_list NEWLINE*
    

    千万 不要 用这个来执行不可信的用户提供的文本。eval()并且exec无法防范恶意用户,如果您使用了恶意用户,他们可以并且
    接管网络进程。

    实际上,除了在扔掉所有服务都已牢固关闭的一次性虚拟机中运行代码之外,没有任何“安全”的方法可以做到这一点。运行新的虚拟机以获取新代码,完成后或超时后丢弃整个VM。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看