您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中使用eval?

在Python中使用eval?

eval并且exec是一种方便快捷的方法,可以动态地获取一些源代码,也许要稍加修改然后再执行- 但是,它们从来不是最好的方法,尤其是在生产代码中,而不是“快速而又简单”脏”的原型&c。

例如,如果我不得不处理这样的动态Python源代码,那么我会使用ast模块-ast.literal_eval比得多eval(比它更安全(您可以直接使用表达式的字符串形式来调用它,如果它是一次性的并且依赖仅在简单常量上执行,或者node = ast.parse(source)先进行操作,然后进行node遍历,也许与合适的访问者一起对它进行修改,例如进行变量查找,然后literal_eval进行节点查找);或者,一旦将节点置于适当的形状并对其进行安全性审查,我可以compile它(产生一个代码对象)并以此构建一个新的函数对象。远不那么简单(除非与最简单的情况ast.literal_eval一样简单eval!),但是在生产质量的代码中更安全,更可取。

对于许多任务,我见过的人(AB-)的使用execeval对,Python的功能强大的内置插件,如getattrsetattr,索引到globals(),&C,提供最好而事实上往往简单的解决方案。对于诸如JSON解析之类的特定用途,库类json更好,例如(例如,参见SilentGhost对耳鸣的评论)。等等…

python 2022/1/1 18:26:28 有186人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶