我在使用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 :(得分:6)
eval
只能评估Python expressions,而不能评估语句。函数定义是一个语句,而不是表达式。
使用exec
执行Python语句。
请参阅Top-level components document,它区分了file input和expression input之间(以及其他):
file_input ::= (NEWLINE | statement)*
此语法用于以下情况:
[...]
- 解析传递给
exec
语句的字符串时;
和
[...]
eval()
的字符串参数必须具有以下格式:eval_input ::= expression_list NEWLINE*
NOT 使用它来执行不受信任的用户提供的文本。 eval()
和exec
没有防范恶意用户,如果您使用此功能,他们可以 接管网络流程。
事实上,没有“安全”的方法可以做到这一点,除了在丢弃的虚拟机中运行代码,所有服务都被牢牢关闭。为新代码运行新虚拟机,完成后或超时后丢弃整个虚拟机。