字典键和 eval 中的破折号

2024-02-05

在我被“评估是邪恶”的人群打死之前,在这种情况下这是必要的邪恶,我无法改变它。 Eval 有其用途,并且在严格控制的环境中它非常强大。

然而,我有一个没有明显解决方案的问题,我希望能够跳出框框思考。

>>> mydict = {"a-b": "woohoo"}
>>> mydict["a-b"]
'woohoo'
>>> eval('mydict["a-b"]')
'woohoo'
>>> eval('a-b', mydict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined

不幸的是,最后一种情况是我被迫使用的,显然它不起作用。有什么想法如何将表达式评估为我的“全局”或“局部”对象而不让它将 - 解释为减号运算符吗?我的“全局”对象中的一些键的键名称中确实有破折号,这是我无法控制的数据。

到下面的评论。

  • 数据是从外部来源传给我的。我根本无法决定或控制数据的格式。
  • 我正在评估的“条款”来自于存储的用户配置。

这是一个更大系统的一部分,用户可以通过 api 推送 JSON 数据,我们在内部将数据作为字典处理,然后对数据应用某些规则。这些规则由管理员通过 Web 界面作为配置提供。

最终,我需要允许用户给我一个(可能很复杂的)python oneliner,并根据字典对其进行评估。这不正是如此吗eval是为了?如果有更好的方法,我无法指定数据的格式,并且必须允许用户给我一个string有评价吗? Eval 很神奇,因为它可以让用户做很多很酷的事情,比如使用.get() and len(),但显然它也有缺点,就像前面提到的无法区分或逃脱-.

Thanks!


您试图在评估期间使字符串“a-b”成为符号。传统上,这不起作用,因为“-”(连字符)不是word。只有 [A-Za-z0-9_] (word) 字符可以用在符号名称中。将连字符更改为下划线效果很好:

>>> mydict = {"a_b": "woohoo"}
>>> eval('a_b', mydict)
'woohoo'
>>> 

然而,在 Python3 中,许多 Unicode 字符可以在符号中使用,并且某些字符可能足以替代 ASCII 连字符:

>>> mydict = {"aᐨb": "woohoo"}
>>> eval('aᐨb', mydict)
'woohoo'
>>> 

在这里,我使用了加拿大音节最后的短横笔画(尽管显然滥用了此代码的预期目的。)请参阅帖子Python3 变量名接受哪些 Unicode 符号? https://stackoverflow.com/questions/17043894/what-unicode-symbols-are-accepted-in-python3-variable-names有关此方法的更多信息。

我需要允许用户给我一个(可能很复杂的)python 一个 并根据字典对其进行评估。

如果是这样的话,不应该a and b成为该字典的一部分,这解决了问题:

>>> mydict = {"a": 34, "b": 13}
>>> eval('a-b', mydict)
21
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字典键和 eval 中的破折号 的相关文章

  • 为什么应用程序会在 sys.exit 命令之后显示?

    我正在关注这个教程 http zetcode com tutorials pyqt4 firstprograms http zetcode com tutorials pyqt4 firstprograms 在第一个示例中 我不明白为什么应
  • 在 python + openCV 中使用网络摄像头的问题

    我正在使用以下代码使用 openCV python 访问我的网络摄像头 import cv cv NamedWindow webcam feed cv CV WINDOW AUTOSIZE cam cv CaptureFromCAM 1 然
  • QSortFilterProxyModel + QAbstractItemModel modelIndex.internalPointer() 导致崩溃

    我在 PyQt 4 8 Python 2 7 中实现了自己的 QAbstractItemModel class FriendListModel QtCore QAbstractItemModel def init self groups c
  • 如何测试顶级窗口是否打开?

    我感觉 Python 编程可能不是我的菜 我创建了一个 tkinter GUI 它使用按钮回调来打开另一个窗口 其他搜索说这个窗口应该是顶级窗口 并且它工作得很好 但是每次按下按钮时它都会打开另一个相同的窗口 如据我所知 窗口 问题 如何测
  • 使用 Marshmallow 中的数据更新行 (SQLAlchemy)

    我正在使用 Flask Flask SQLAlchemy Flask Marshmallow marshmallow sqlalchemy 尝试实现 REST api PUT 方法 我还没有找到任何使用 SQLA 和 Marshmallow
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • Python/Flask:应用程序在关闭后正在运行

    我正在开发一个简单的 Flask Web 应用程序 我使用 Eclipse Pydev 当我开发该应用程序时 由于代码更改 我必须经常重新启动该应用程序 这就是问题所在 当我运行该应用程序时 我可以在本地主机上看到该框架 这很好 但是当我想
  • 超时时杀死或终止子进程?

    我想尽可能快地重复执行子进程 然而 有时这个过程会花费太长的时间 所以我想杀死它 我使用 signal signal 如下所示 ppid pipeexe pid signal signal signal SIGALRM stop handl
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • tweepy 流到 sqlite 数据库 - 语法错误[重复]

    这个问题在这里已经有答案了 可能的重复 tweepy 流到 sqlite 数据库 语法无效 https stackoverflow com questions 9434205 tweepy stream to sqlite database
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac

随机推荐

  • 区分 tkinter 菜单中两个相同项目的问题

    我创建的程序允许用户在键盘上输入的任何字母都写在海龟图形画布上 在我的程序中 我还创建了一个 Python 菜单 每次用户执行函数 绘制字母时 都会向该菜单写入一个 Point 对象 针对每个字母函数 但是 由于我的程序的性质 用户还可以将
  • Helm 和 Kustomize 之间有什么区别?

    我已经使用 Kubernetes 和 Helm 一段时间了 现在第一次接触 Kustomize 但 Kustomize 和 Helm 之间到底有什么区别呢 两者只是捆绑 K8s 元素 例如服务 部署等 的不同解决方案吗 或者同时使用 Hel
  • 为什么 String.raw 不能以反斜杠结尾? [复制]

    这个问题在这里已经有答案了 字符串 raw https developer mozilla org en US docs Web JavaScript Reference Global Objects String raw可用于创建包含反斜
  • 骆驼聚集策略

    我正在解析一个 CSV 文件 将其分割并通过骆驼中的多个处理器进行路由 有两个端点 一个有错误的数据 而另一个有经过验证的数据 我需要汇总数据的建议 假设 CSV 文件有 10 条记录 其中 6 条到达一个端点 4 条到达另一个端点 我如何
  • Apache 307 Redirect 重定向 POST 数据

    PayPal 很烦人 如果您有数千名客户订阅POSTIPN 即时付款通知 到某个 URL 您永远无法更改该 URL 如果您希望将 IPN 发送到另一个 URL 他们的建议 告诉您的所有客户在更改 IPN URL 后取消订阅并开始新订阅 伟大
  • 如何将每个回调包装在一个地方以改进错误处理

    在我的 GWT 应用程序中 有许多不同的异步调用使用许多不同的服务对服务器进行 为了更好地处理错误 我想包装所有回调 以便我可以处理异常 例如InvocationExceptions在一个地方 一个超类实现AsyncCallback并不是真
  • 如何为 XAttribute 指定命名空间,同时拥有另一个具有相同值的命名空间?

    我想要做的只是一个用于将数据表导出到 Excel 的 XML 文档 所以我需要的是这样的
  • 将文本框中的字符串转换为 dd/mm/yyyy 日期

    如何将文本框中的字符串转换为 dd mm yyyy 日期形式 我的意思是 Date d Date textBox Text 我想将它用作 SQL 中的参数Date数据类型如下 command Parameters Add new Npgsq
  • iOS EventKit - 事件未从日历中删除

    我正在使用以下代码删除事件 store requestAccessToEntityType EKEntityTypeEvent completion BOOL granted NSError error if granted EKEvent
  • C:函数调用时传递参数时的类型转换

    来自 C 编程语言 第二版 由于函数调用的参数是表达式 因此当参数传递给函数时也会发生类型转换 如果没有函数原型 char 和short 会变成int float 会变成double 通过阅读文本 我得到的印象是 除非您使用强制转换或函数原
  • 计算花费的时间总和

    我有一个 SQL 查询来计算并发作业所花费的时间 这是查询 SELECT user concurrent program name DECODE phase code C Completed phase code phase code DE
  • 向 UIView 添加渐变的现代技术

    我知道向 UIView 添加背景渐变的几种方法 我想知道最有效和可扩展的方法是什么 为什么 以下是我使用过的技术 创建 UIView 的子视图并覆盖drawRect 我在其中在当前上下文中绘制渐变 A 当使用上面的渐变时 用视图边界创建它
  • Python - 如何强制使用工厂方法来实例化对象?

    我有一组相关的类 它们全部继承自一个基类 我想使用工厂方法来实例化这些类的对象 我想这样做是因为这样我可以在将对象返回给调用者之前将对象存储在以类名为键的字典中 然后 如果有对特定类的对象的请求 我可以检查我的字典中是否已存在该对象 如果没
  • AWS Lambda Node.js 全 ICU

    我使用以下命令在本地运行 node js 应用程序 node icu data dir node modules full icu app local js 如何在AWS Lambda环境中指定icu data dir Thanks 您应该
  • JPA 将 STRING 列值连接成单个值,就像聚合函数一样

    是否可以使用 JPA 拥有一个自定义聚合函数来扩展 concat 以便将列值连接成单个字符串 我最近在使用 JPA 和 H2 数据库时遇到了同样的问题 我试着打电话给组连接 http www h2database com html func
  • 有没有办法在 cocoapods 中使用拉取请求?

    有了 swift 3 许多 cocoapods 都在努力跟上每个测试版带来的变化 有时这些更改不会很快合并到分支中 在这些情况下 有没有办法使用分支的拉取请求 例子 https github com MengTo Spring pull 1
  • 为什么 Ubuntu docker 镜像不是虚拟机 [重复]

    这个问题在这里已经有答案了 我明白了虚拟机和容器之间的巨大区别 但这让我对 Ubuntu 容器如何存在感到困惑 这对我来说感觉很矛盾 因为 Ubuntu 是一个操作系统 https hub docker com ubuntu https h
  • 未知属性 onItemSelected/onCheckedChanged

    我创建了 SwitchCompat 并添加了android onCheckedChanged 一切正常 但 Android Studio 将此属性标记为警告 描述 未知属性 android onCheckedChanged AppCompa
  • java中的ESC/POS图像

    我需要在热敏打印机 SAM4S ELLIX40 中打印此图像 我一直在搜索和测试几个代码 但实际上没有任何效果 他们说 使用这个命令 你会看到一行 我发送了它 但没有任何反应 我尝试了手册中的命令 ESC m nL nH d1 dk GS
  • 字典键和 eval 中的破折号

    在我被 评估是邪恶 的人群打死之前 在这种情况下这是必要的邪恶 我无法改变它 Eval 有其用途 并且在严格控制的环境中它非常强大 然而 我有一个没有明显解决方案的问题 我希望能够跳出框框思考 gt gt gt mydict a b woo