当前位置: 首页 > 面试题库 >

通过Python的eval()运行JSON?

刁钧
2023-03-14
问题内容

除了最佳做法,是否有令人信服的理由 这样做?

我正在编写一个与Google
Code项目一起使用的提交后挂钩,该项目通过JSON对象提供提交数据。GC随请求(JSON数据之外)一起提供了HMAC身份验证令牌,因此通过验证该令牌,我对JSON数据既是良性的(因为不信任Google毫无意义)也很有把握。

我自己的(简短的)调查表明,JSON完全是有效的Python,除了"\/"转义序列(GC似乎没有生成)外。

因此,当我使用Python 2.4(即没有json模块)时,eval()看起来 确实 很诱人。

编辑: 记录下来,我 不是 问这是个好主意。我
清楚它不是,而且我非常怀疑我是否会在以后的任何项目中使用这种技术,即使最终将其用于此项目。我只是想确保自己知道如果遇到这种麻烦。:-)


问题答案:

如果您对脚本可以在一段时间内正常工作感到满意,然后在某些晦涩的边缘情况下随机失败,我将使用eval。

如果您的代码要健壮很重要,那么我会花时间添加simplejson。您不需要C部分来加快速度,因此确实不难将一些.py文件转储到某个目录中。

例如,JSON会使用Unicode,而simplejson返回Unicode,而eval返回str:

>>> simplejson.loads('{"a":1, "b":2}')
{u'a': 1, u'b': 2}
>>> eval('{"a":1, "b":2}')
{'a': 1, 'b': 2}

编辑:eval()表现不同的一个更好的示例:

>>> simplejson.loads('{"X": "\uabcd"}')
{u'X': u'\uabcd'}
>>> eval('{"X": "\uabcd"}')
{'X': '\\uabcd'}
>>> simplejson.loads('{"X": "\uabcd"}') == eval('{"X": "\uabcd"}')
False

编辑2:今天看到了SilentGhost指出的另一个问题:eval无法正确处理true-> True,false-> False,null-> None。

>>> simplejson.loads('[false, true, null]')
[False, True, None]
>>> eval('[false, true, null]')
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'false' is not defined
>>>


 类似资料:
  • 问题内容: 我期待从Python的MATLAB。我需要使用MATLAB Image Acquisition Toolbox从摄像机获取少量图像。 MATLAB似乎是一个不错的解决方案,因为图像采集很容易,之后我必须做一些图像处理。我已经搜索了很长时间,但仍然没有找到任何可用于Python的方法。 这是我的一些尝试: mlabwrap 1.1-运行MATLAB脚本: MATLAB脚本如下: 您可以使

  • 我正在尝试运行一个python3脚本,每天在特定的时间检查电子邮件的特定条件。 我可以看到crontab调用了这些命令,但脚本没有给出我需要的结果,即似乎没有运行。我可以在syslog中看到cron的执行: 8月3日16:25:01 raspberrypi/USR/SBIN/CRON[4597]:(pi)CMD(cd/home/pi/pythonscripts) 8月3日16:25:01 rasp

  • 本文向大家介绍Python eval(),包括了Python eval()的使用技巧和注意事项,需要的朋友参考一下 该方法解析传递给此方法的表达式,并在程序中运行该表达式。换句话说,它将字符串解释为python程序中的代码。 语法 eval的语法如下- 哪里 表达式-这是传递给方法的python表达式。 globals-可用的全局方法和变量的字典。 locals-可用的本地方法和变量的字典。 在下

  • 我在通过docker compose使用远程python解释器运行pycharm时遇到一些问题。除了Python控制台之外,其他一切都很好。当我按下run按钮时,它只显示以下消息: "错误:无法从docker-comment输出中找到服务"web"的容器名称" 我真的不明白为什么它总是让我觉得如果我的提供了服务。 有什么帮助吗? 编辑: docker-compose.yml Dockerfile

  • 我之前做过,但现在无法通过selenium使用chrome。浏览器打开几秒钟后关闭,然后出现错误(大约5分钟后): 我使用以下代码运行浏览器(我一直使用): ChromeDrive目录位于PATH中。你可以在错误中看到的chrome和chrome驱动程序的版本。Python 3.7.0,硒==3.14.0。我的行为有什么问题? 顺便说一句,它可以与Firefox配合使用

  • 一些注意事项: 1。我最初使用的TestNG jar来自java项目中的maven repo。下面的所有方法都是用maven testNG jar和新的TestNG6.9.12下载进行测试的。 2。我可以从Eclipse中运行这个文件。只有当我尝试从命令行运行时才有问题。 3。最终目标是通过javafx应用程序按钮触发命令行来运行测试。如果提供的解决方案避免在cmd中键入绝对路径,因为应用程序将在