评估不适用于多行字符串
我在使用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
-
eval
只能评估Python 表达式
,不能评估语句。函数定义是语句,而不是表达式。使用
exec
执行Python语句。请参阅“ 顶层组件”
文档,该文档在
文件输入 和
表达式输入 之间进行区分(其中包括):file_input ::= (NEWLINE | statement)*
在以下情况下使用此语法:
[…]
- 解析传递给该
exec
语句的字符串时;
和
[…]的字符串参数
eval()
必须具有以下形式:eval_input ::= expression_list NEWLINE*
千万 不要 用这个来执行不可信的用户提供的文本。
eval()
并且exec
无法防范恶意用户,如果您使用了恶意用户,他们可以并且 将
接管网络进程。实际上,除了在扔掉所有服务都已牢固关闭的一次性虚拟机中运行代码之外,没有任何“安全”的方法可以做到这一点。运行新的虚拟机以获取新代码,完成后或超时后丢弃整个VM。
- 解析传递给该