首页 > 解决方案 > 使用 exec() 获取类实例

问题描述

我有一个类,我需要使用字符串输入来创建它,我听说过exec(),所以我尝试使用它,并且我将字符串正确放入,但它给了我错误,这是exec行:

exec(" ".join(args[2:])).toString()

列表的前 2 部分不相关。我调试了这个字符串只是为了看看它是否正确,甚至尝试对其进行硬编码并且它有效,但是当我使用exec.

这有什么问题,我怎样才能做到这一点?

感谢所有评论:)

编辑:

我得到的错误是AttributeError说它是一个NoneType,虽然如果我只是硬编码它,它工作得很好。

标签: pythonexec

解决方案


解决方案 1:不要传递 Python 表达式,而是使用 argparse 的子命令或定义自己的易于解析的迷你语言。您可以将相关的类和函数存储在 dict 中以从字符串中获取它们(比依赖更好,globals因为它允许您仅将要公开的内容列入白名单)

解决方案 2:使用ast模块的全部功能将 Python 表达式解析为 ast,然后编写您自己的访问者以安全地评估 ast。

解决方案 3:继续使用execoreval并等待某些脚本小子擦除您的完整硬盘或更糟。


推荐阅读