python eval和literal_eval

转自:https://www.cnblogs.com/likui360/p/5770601.html

eval是python中一个相当智能的函数,把参数当成表达式,进行最大限度的解析,

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
=  "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
 
=  eval (a)
 
b
Out[ 3 ]: [[ 1 2 ], [ 3 4 ], [ 5 6 ], [ 7 8 ], [ 9 0 ]]
 
type (b)
Out[ 4 ]:  list
 
=  "{1: 'a', 2: 'b'}"
 
=  eval (a)
 
b
Out[ 7 ]: { 1 'a' 2 'b' }
 
type (b)
Out[ 8 ]:  dict
 
=  "([1,2], [3,4], [5,6], [7,8], (9,0))"
 
=  eval (a)
 
b
Out[ 11 ]: ([ 1 2 ], [ 3 4 ], [ 5 6 ], [ 7 8 ], ( 9 0 ))

从以上可以看出,eval相当的好用,但是它也能解析一些输入命令,比如:

1
eval ( "__import__('os').system('dir')" )

这样写会将当前目录下的文件全都显示出来,如果换成删除,那麻烦就大了。

所以,很多时候我们需要在转换前先检查下表达式的合法性,或者直接使用literal_eval,这个函数会自动的检查安全性和合法性,如果有问题就会直接抛出异常,使用literal_eval前要先导入ast。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值