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) 中是不是有任何已知的安全漏洞?

ValueError:添加 Keras 层时带有 ast.literal_eval() 的节点或字符串格式错误

如何将字符串转换为字典或列表?

将字符串转化为字典