在Python中使用exec和eval

use*_*312 8 python eval exec

所以,我已经明白了exec,并evalcompile做.但为什么我需要使用它们呢?我对使用场景不清楚.

任何人都可以给我一些例子,以便我能更好地欣赏这个概念.因为我知道这都是理论.

Jim*_*nis 5

我举一个例子,我已经使用过eval,我认为这是最好的选择.

我正在编写一个简单的软件测试实用程序......用于测试学生练习是否符合作业要求.目标是为简单的配置文件提供一种方法作为测试规范(解决使用编程语言描述/记录/实现基本编程分配的测试用例的"鸡与鸡蛋"问题) .

我将我的工具基于标准库中的ConfigParser.但是,我确实希望能够表示任意Python字符串(包括\n,\ t的插值,尤其是从中读取的值中的任何插值的十六进制编码的ASCII字符.

我的解决办法是try围绕一个parsed_string=eval('''%s''' % cfg_read_item)接着一个try的相同的三双引号版本("""%s的","").

这种情况下,替代方案是编写(或找到预先编写的)Python语言解析器,并弄清楚如何将其包含并调整到我的程序中.风险很小(我不担心学生提交的代码会欺骗我的解析器,如果它的监狱爆发,删除我的所有文件,发送我的信用卡号码到罗马尼亚等等)*

*(部分原因是我在Linux下从不受信任的无头用户帐户测试它们).

正如其他人所说,还有其他一些用例,你根据输入数据从模板构建代码,并需要执行该代码(元编程).您应始终能够以其他方式完成这些任务.但是,每当该替代方案需要编写代码来编写通用编程语言解析器/编译器/解释器....那么eval可能是更好的方法.