python - 使用 exec() 获取类实例
问题描述
我有一个类,我需要使用字符串输入来创建它,我听说过exec()
,所以我尝试使用它,并且我将字符串正确放入,但它给了我错误,这是exec
行:
exec(" ".join(args[2:])).toString()
列表的前 2 部分不相关。我调试了这个字符串只是为了看看它是否正确,甚至尝试对其进行硬编码并且它有效,但是当我使用exec
.
这有什么问题,我怎样才能做到这一点?
感谢所有评论:)
编辑:
我得到的错误是AttributeError
说它是一个NoneType
,虽然如果我只是硬编码它,它工作得很好。
解决方案
解决方案 1:不要传递 Python 表达式,而是使用 argparse 的子命令或定义自己的易于解析的迷你语言。您可以将相关的类和函数存储在 dict 中以从字符串中获取它们(比依赖更好,globals
因为它允许您仅将要公开的内容列入白名单)
解决方案 2:使用ast
模块的全部功能将 Python 表达式解析为 ast,然后编写您自己的访问者以安全地评估 ast。
解决方案 3:继续使用exec
oreval
并等待某些脚本小子擦除您的完整硬盘或更糟。
推荐阅读
- reactjs - 尝试部署我的 Gatsby 站点时收到“props.children 不是函数”错误
- spring - 如何避免在 Sping Reactor 中对类似订阅者重复映射操作?
- python - 设置背景颜色和背景图像
- python - anaconda 环境中的 pip vs conda
- python - 如何在按钮按下tkinter时从文本框中检索输入
- r - 在给定另一列的值的情况下,命名从一列转换值的三种方法
- r - 具有多个因素的数据框中的正态性检验
- javascript - 将返回的 API 数据存储在异步函数外部的变量中
- android - 不全面的 Android Studio - Device emulator-5554 离线。错误 - 仅显示黑屏
- android - 屏幕方向更改错误Android时的mediaPlayer seekto(pos)