将 eval 与字典结合使用,不会丢失 Python2 中导入的模块

2024-03-15

我有一个要在 python 程序中执行的字符串,我想将字符串中的一些变量(如 x[1]、x[2])更改为其他变量。 我之前使用过带有 2 个参数的 eval (第二个是带有 Replaced_word: new_word 的字典),但现在我注意到我不能像这样使用以前导入的模块。所以如果我这样做

from math import log
eval(log(x[1], {x[1]: 1})

它会说它无法识别名称日志。 如何在不丢失全局变量的情况下使用 eval ? 我真的无法理解文档:https://docs.python.org/2/library/functions.html#eval https://docs.python.org/2/library/functions.html#eval所以解释也很有用。


构建您的全局变量dict with globals() https://docs.python.org/2/library/functions.html#globals作为基础:

from math import log

# Copy the globals() dict so changes don't affect real globals
eval_globals = globals().copy()
# Tweak the copy to add desired new global
eval_globals[x[1]] = 1

# eval using the updated copy
eval('log(x[1])', eval_globals)

或者,您可以使用三参数eval https://docs.python.org/2/library/functions.html#eval to use globals()未修改,但也提供locals dict将首先检查(和修改),优先于全局值:

eval('log(x[1])', globals(), {x[1]: 1})

理论上,后一种方法可以允许表达式改变原始全局变量,因此添加.copy()做到这一点eval('log(x[1])', globals().copy(), {x[1]: 1})最大限度地减少意外发生的风险。但病态/恶意代码可以解决这个问题;eval毕竟是危险的,无论你如何将其沙箱化,都不要相信它可以进行任意输入。

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

将 eval 与字典结合使用,不会丢失 Python2 中导入的模块 的相关文章

  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 为什么第二个 request.session cookies 返回空?

    我想使用 requests Session post 登录网站 但是当我已经登录主页 然后进入帐户页面时 看来cookies还没有保存 因为cookies是空的 而且我无法进入正确的帐户页面 import requests from bs4
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 非法指令:MacOS High Sierra 上有 4 条指令

    我正在尝试在 pygame 3 6 中制作一个看起来像聊天的窗口 我刚刚将我的 MacBook 更新到版本 10 13 6 在我这样做之前它工作得很好 但在我收到消息之后 非法指令 4 Code import pygame from pyg
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged

随机推荐

  • 在 Eclipse 中使用 Maven Android 原型

    我正在尝试使用以下原型 https github com akquinet android archetypes wiki Android release archetype https github com akquinet androi
  • 如何在FragmentStatePagerAdapter中动态添加页面

    我知道这个问题被问了很多次 但经过多次研究后我没有得到答案 在我的主要活动中 我有一个视图寻呼机 并为此设置了一个适配器 public void onCreate Bundle savedInstanceState super onCrea
  • R 中按日期范围设置的 data.table 子集

    我在 data table 中有一个大型数据集 我想按日期范围对其进行子集化 我的数据集如下所示 testset lt data table date as Date c 2013 07 02 2013 08 03 2013 09 04 2
  • 如何从一个视图访问另一个视图的数据?

    我有一个UITabBarController有两个选项卡 UINavigationController OptionsViewController UIViewController 我如何获取数据 即UILabel text 设于Optio
  • 帕累托最优前沿

    我试图获得两个适应度函数的帕累托最优前沿 我通过使用虚拟矩阵对非支配解进行排序 该虚拟矩阵在矩阵中为任何非支配解分配 1 当我绘制帕累托前沿时 它不断包含我知道不属于帕累托最优的点 但是 我似乎找不到这个问题的原因 任何帮助将非常感激 fo
  • WebClient 下载字符串与 WebBrowser 查看源代码不同

    我正在创建一个 C 4 0 应用程序来使用 Web 客户端下载网页内容 网络客户端功能 public static string GetDocText string url string html string Empty try usin
  • Chrome:检查元素与查看源代码

    我正在使用 Chrome 10 接收 XML 格式的 Web 服务响应 请求成功完成 然后我想查看结果的内容 我转到 检查元素 并查看所需的 XML 出于好奇 我还查看了源码 我非常确定 Chrome 的工作方式是 Inspect Elem
  • D3 防止双击缩放[重复]

    这个问题在这里已经有答案了 我有一个 D3 网络图 我正在尝试禁用双击缩放功能 我使用它进行缩放 var zoom d3 behavior zoom scaleExtent minZoom maxZoom zoom on zoom func
  • JMS QueueSender 线程安全吗?

    我想在多线程环境中使用 QueueSender Is QueueSender send 线程安全 No a MessageProducer QueueSender不是线程安全的 或者更具体地说 Session http java sun c
  • 计算泊松概率百分比

    当您在 Excel 或 OpenOffice Calc 中使用 POISSON 函数时 它需要两个参数 一个整数 一个 平均 数字 并返回一个浮点数 在 Python 中 我尝试了 RandomArray 和 NumPy 它返回一个随机泊松
  • 如何在iOS应用程序中运行可执行文件?

    我想在我的系统中运行一个可执行文件iOS应用程序 或者执行一些命令行命令 我认为这可以在 NSTask 的帮助下完成 但这似乎在 iOS 中不可用 它仅适用于 mac OS X So 如何从我的应用程序运行可执行文件 或者我如何从我的应用程
  • 我可以从特定IP(如果机器有两个IP)在PHP中打开套接字吗?

    我正在使用 PHPMailer 它使用fsockopen访问 SMTP 服务器 但该机器有两个具有不同反向 DNS 记录的 IP 所以在电子邮件标题中我得到以下内容 Received from one server tld HELO ano
  • XPath 1 查询和属性名称

    第一个问题 有什么办法可以得到name节点的属性
  • 如何分割日语文本?

    使用 Java 分割日语文本的最佳方法是什么 例如 对于以下文本 私 名前 私 行 我需要以下输出 私 名前 私 行 可以使用黑字吗 您可以使用java text BreakIterator String TEXT 私 名前 私 行 Bre
  • 使用 strptime 获取具有时区偏移的日期时间对象时出现 ValueError [重复]

    这个问题在这里已经有答案了 我正在尝试将日期字符串转换为日期时间对象 dt datetime datetime strptime 2011 07 15 13 00 00 00 00 Y m d H M S 但我收到这个错误 Tracebac
  • 为什么我无法从 WPF 运行截图工具?

    我创建了一个带有很多按钮的 WPF 窗口 每个按钮都运行不同的程序 例如 要运行 MS Word 我使用了 System Diagnostics Process Start C Program Files x86 Microsoft Off
  • 单元测试注释?

    我问自己应该对我的课程进行多深的 单元 测试 例如 我有以下简单的类 import javax annotation security PermitAll import javax ejb Singleton import javax ws
  • 为什么我的程序无法链接?

    我正在做一个 opengl 程序 并找到了一个可以实现我想要的功能的示例 但是当我尝试编译它时 使用gcc o picksquare picksquare c lglut I get tmp cchE9Z0Y o In function p
  • 如何让每次按下按钮时从字符串前面连续移动n个字符到末尾?

    每次按下按钮时 我都试图将字符串的第一个字符移到末尾 我的逻辑似乎只在按下按钮后一次又一次地显示第一个输出 string input string manipulated int initial input txtInput Text if
  • 将 eval 与字典结合使用,不会丢失 Python2 中导入的模块

    我有一个要在 python 程序中执行的字符串 我想将字符串中的一些变量 如 x 1 x 2 更改为其他变量 我之前使用过带有 2 个参数的 eval 第二个是带有 Replaced word new word 的字典 但现在我注意到我不能