eval与ast.literal_eval
Posted cxms
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eval与ast.literal_eval相关的知识,希望对你有一定的参考价值。
原文:https://blog.csdn.net/sun2333/article/details/82418326
1、eval可以字符串型的list,tuple,dict转变成原有的类型
(1)string <=> list
In [1]: s = ‘[1, 2, 3, 4]‘ In [2]: l = eval(s) In [3]: s Out[3]: ‘[1, 2, 3, 4]‘ In [4]: l Out[4]: [1, 2, 3, 4] In [5]: type(s) Out[5]: str In [6]: type(l) Out[6]: list
(2)string <=> tuple
In [9]: s = ‘(1, 2, 3)‘ In [10]: l = eval(s) In [11]: s Out[11]: ‘(1, 2, 3)‘ In [12]: l Out[12]: (1, 2, 3) In [13]: type(s) Out[13]: str In [14]: type(l) Out[14]: tuple
(3)string <=> dict
In [15]: s = "{‘key‘: ‘value‘}" In [16]: d = eval(s) In [17]: s Out[17]: "{‘key‘: ‘value‘}" In [18]: d Out[18]: {‘key‘: ‘value‘} In [19]: type(s) Out[19]: str In [20]: type(d) Out[20]: dict
2、ast.literal_eval:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算
只会执行合法的python类型,会降低系统风险
以上是关于eval与ast.literal_eval的主要内容,如果未能解决你的问题,请参考以下文章
为啥 json.loads 比 ast.literal_eval 更适合解析 JSON?
ast.literal_eval - 循环遍历列表中的字符串元素
Python 3,ast.literal_eval(node_or_string) 中是不是有任何已知的安全漏洞?