【发布时间】:2014-03-06 20:37:52
【问题描述】:
我听说 ast.literal_eval 比 eval() 安全得多,但是在更改我的代码时,我收到了“格式错误的字符串/节点”错误。
例如:
bar = False
incorrect = {"foo":bar}
correct = {"foo":"bar"}
ast.literal_eval(incorrect)
返回错误但是
ast.literal_eval(correct)
返回预期的 {"foo":"bar"}
为什么第一次评估不返回 {"foo":False}
【问题讨论】:
-
也许你想在你的字典周围加上引号,否则为什么还要用 eval 呢?
literal_eval('{"foo":"bar"}')按预期工作。 -
你想达到什么目的?
-
我试图确保没有恶意代码进入程序,但我猜literal_eval就是这样做的,只评估文字。是否有比 eval() 更好的替代方案,它考虑到其他值,或者是我要求的矛盾?
-
您是否尝试验证来自网站表单或类似内容的用户输入?如果是这样,不幸的是,这不是正确的方法。使用
eval是确保某些恶意代码进入您的程序的好方法。 -
听起来很像en.wikipedia.org/wiki/JSON,您可以在
import json那里工作。
标签: python dictionary eval