eval和ast.literal_eavl区别

1 eval1.1 字符串型数据还原本身类型python中,eval可以将字符串型的list,tuple,dict转变成原有的类型。
即,eval可以把数据还原成它本身或者是能够转化成的数据类型。
//string 转 list >>> str_list='[1,2,3,4]' >>> eva_list=eval(str_list) >>> str_list;eva_list '[1,2,3,4]' [1, 2, 3, 4] >>> type(str_list);type(eva_list) //string 转 tuple >>> str_tuple='(1,2,3)' >>> eval_tuple=eval(str_tuple) >>> str_tuple;eval_tuple '(1,2,3)' (1, 2, 3) >>> type(str_tuple);type(eval_tuple) //string 转 dict >>> str_dict={'name':'nihao'} >>> eval_dict=eval(str_dict) >>> str_dict;eval_dict {'name':'nihao'} {'name': 'nihao'} >>> type(str_dict);type(eval_dict) 1.2 字符串型数据进行运算>>> ret=eval(raw_input('请输入字符串:')) 请输入字符串:1+1 >>> ret 21.3 字符串型语句命令只要eval能解析的字符串,都会当做合法的表达式或命令执行,而不顾可能带来的后果。
>>> open(r'e://filename.txt','r').read >>> __import__('os').system('dir') >>> __import__('os').system('rm -rf /etc/*')eval强大的背后,是巨大的安全隐患。比如上面的删除文件。
所以,才有了ast.literal_eval。
2 literal_evalast.literal_eval(),先判断执行的内容是不是合适的python类型,如果是则执行,否则就不执行。
这样可以大大降低系统的危险性,所以,对字符串进行类型转换的时候,最好是用ast.literal_eval()函数。
2.1 合适数据类型# 合适数据类型 >>> ast.literal_eval('[1,2,3]') [1, 2, 3] >>> ast.literal_eval('(1,2,3)') (1, 2, 3) >>> ast.literal_eval({'name':'nihao'}) {'name': 'nihao'}2.2 不合适数据类型# 不合适数据类型 >>> ast.literal_eval('1+1') traceback (most recent call last): file

高可靠性超薄高效率单路输出医疗电源-CUS150M1
液流储能电池特点
工业PCBA清洗设备需要满足哪些要求?
【鲁班猫门禁系统】安装mysql
A10200产品介绍
eval和ast.literal_eavl区别
我心中的MWC:那些值得期待的移动处理器
技术解读:小米CyberDog中文名为“铁蛋”,仿生机器人有多难?
美国拟要求新车配备车对车通信技术(V2X)
射频识别装置是如何研制的
基于USB的硬度计数据通信的实现
物联网时代网页设计可能不好过了
长江存储发布严正声明
普渡科技携多款智能机器人产品亮相第十届中国电子信息博览会
到底要不要升级苹果iOS 15呢
关于低功耗传感器LIS2DW12TR3轴加速度计测量精度剖析
单表多用户模块化智能电表系统的原理及设计
意法半导体:存储器产品解决方案
智能会议平板如何让会议焕然一新?能力MAX的MAXHUB有话说
东北航空公司购买15架ARJ21飞机用于投入东三省的支线运营