- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我遇到了一些代码的情况,其中 eval()
是一种可能的解决方案。现在,我以前从未使用过 eval()
,但是,我发现了大量关于它可能导致的潜在危险的信息。也就是说,我对使用它非常谨慎。
我的情况是我有用户给出的输入:
datamap = input('Provide some data here: ')
datamap
需要是字典。我四处搜索,发现 eval()
可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是一种可行的安全预防措施。
datamap = eval(input('Provide some data here: ')
if not isinstance(datamap, dict):
return
我通读了文档,但我仍然不清楚这是否安全。 eval 是在输入数据后立即评估数据还是在调用 datamap
变量后评估数据?
ast
模块的 .literal_eval()
是唯一安全的选择吗?
最佳答案
datamap = eval(input('Provide some data here: '))
表示您实际上评估代码之前您认为它不安全或不安全。它会在调用函数后立即评估代码。另见 the dangers of eval
.
ast.literal_eval
如果输入不是有效的 Python 数据类型,则引发异常,因此如果不是,则不会执行代码。
在需要时使用 ast.literal_eval
eval
.您通常不应该评估文字 Python 语句。
关于python - 使用 python 的 eval() 与 ast.literal_eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15197673/
我正在使用 ast.literal_eval(str) 评估包含元组的字符串,例如 ('a', 'b', 'c')。然而,如果由于某种原因这个元组只包含一个元素,表达式将忽略括号并只返回元素: >>>
集合不可散列,因为它们是可变的。但是有没有办法仍然在 {1, 2, {3, 4}} 上使用literal_eval?我只想知道外部结构是一个集合,我不关心内部类型,但集合内的集合是可能的输入。 更新:
我已经从librosa库中提取了数据集。 This is top five data. These are the total columns. 这些数据为对象格式。 It has got '\n'
我正在使用 ast.literal_eval 将我从 json.loads() 收到的数据更改为 Python 字典;但是,如果我应该以一种完全不同的方式来解决这个问题 - 请随时指出这一点。 # A
目标:我想从下面的 request.POST 中提取 map 键中的 longlat 元组。 问题:我使用 ast.literal_eval 提取元组,但不知何故只返回第二个元组。 markers
ast.literal_eval() 是否适用于字典列表?对我来说,它给出了格式错误的字符串错误? [[u'ABN', u'12', u'', 2.69, u'222.222.222.222', u'
我收到格式错误的字符串错误。 这是我的测试 >>> eval("'Hello:: '+'fdsfds'") 'Hello:: fdsfds' >>> import ast >>> ast.litera
我在使用 ast.literal_eval() 时遇到了问题。在下面的示例中,我只想将字符串 (myText) 转换为字典。但是 ast.literal_eval() 尝试评估 并给我一个错误。我完全
这个问题在这里已经有了答案: can anyone tell me what i'm doing wrong? ast.literal_eval malformed node or string p
好吧... Unicode 字符串被编码为 Python 2.x 字符串(实际上是字节序列) Python 2.x 字符串被解码为 Unicode 字符串 Python UnicodeDecodeEr
运行 python 程序时出现以下错误。我使用的是 python 3.4,我已经安装了 Ferenda-0.1.7-py3.4,错误是: File "C:\Python34\lib\site-pack
我只是很好奇这是否存在风险,我想不出用户可能导致这种情况发生的方式......但这似乎令人担忧。 >>> import ast >>> help(ast.literal_eval) Help on f
我对相同的数据使用了 json dump 然后 json load。数据是 unicode 所以我把它转换成字符串。使用 ast.literla_eval 我试图获取要听写的字符串的类型,但出现错误
我是 python 的新手,尝试使用 ast.literal_eval 获取请求数据导致“语法无效”错误。 它打印我发送的数据,格式如下, 192.156.1.0,8181,database,admi
我有一个字符串 "{'datetime': datetime.datetime(2010, 11, 21, 0, 56, 58)}" 我想将其转换为它所代表的对象。使用 ast.literal_eva
我正在尝试从文件中读取元组的字符串表示形式,并将元组添加到列表中。这是相关代码。 raw_data = userfile.read().split('\n') for a in raw_data :
我遇到了这个代码并且它有效,但我不完全确定 何时使用 ast 和 是否存在性能问题当使用它而不是从 input() 获取字符串值时并将其转换为int。 import ast cyper_key = a
或者另一种方式来询问我想是否有一个文字将 literal_eval 转换为范围函数的等价物(不将整个数组作为范围发送)。 以下 import ast ast.literal_eval("range(0
假设我有一个文件 example.py: 导入示例 VVV = 2 DictionaryNameB = { 'a' : VVV, 'bb'
ast.literal_eval(node_or_string) 有什么已知的方法吗?的评估实际上并不安全? 如果是,是否有可用的补丁? (我已经知道 PyPy[sandbox],它可能更安全,但除非
我是一名优秀的程序员,十分优秀!