zoukankan      html  css  js  c++  java
  • ast.literal_eval(转)

    eval函数在Python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型。那么eval和ast.literal_val()的区别是什么呢?本文将大家介绍关于Python中函数eval和ast.literal_eval区别的相关资料,需要的朋友可以参考下。

    前言

    众所周知在Python中,如果要将字符串型的list,tuple,dict转变成原有的类型呢? 这个时候你自然会想到eval. eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型.下面来看看示例代码:

    string <==> list

    string <==> tuple

    string <==> dict

    也就是说,使用eval可以实现从元祖,列表,字典型的字符串到元祖,列表,字典的转换,此外,eval还可以对字符
    串型的输入直接计算。比如,她会将'1+1'的计算串直接计算出结果。

    从上面来看,eval功能可谓非常强大,即可以做string与list,tuple,dict之间的类型转换,还可以做计算器使用!更有甚者,可以对她能解析的字符串都做处理,而不顾忌可能带来的后果!所以说eval强大的背后,是巨大的安全隐患!!! 比如说,用户恶意输入下面的字符串

    open(r'D://filename.txt', 'r').read()

    __import__('os').system('dir')

    __import__('os').system('rm -rf /etc/*')

    那么eval就会不管三七二十一,显示你电脑目录结构,读取文件,删除文件.....如果是格盘等更严重的操作,她也会照做不误!!!

    所以这里就引出了另外一个安全处理方式ast.literal_eval.可以先看下stackoverflow及Python官方关于这个解释!

    stackoverflow

    Python官方文档

    简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

    比如说上面的计算操作,及危险操作,如果换成了ast.literal_eval() ,都会拒绝执行。

    报值错误,不合法的字符串!

    而只会执行合法的Python类型,从而大大降低系统的危险性!

    所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()函数!

    总结

    以上就是Python中关于eval函数与ast.literal_eval使用的区别介绍(图文)的详细内容,更多请关注php中文网其它相关文章!

  • 相关阅读:
    mysqlbinlog基于某个偏移量进行数据的恢复(重做),--start-position,--stop-position的使用方法
    mysql数据库binary log中的事件到底是什么?
    mysqlbinlog工具的作用是什么呢,如何将binary log转换为文本格式?
    mysqldump对于DB进行逻辑备份的时候,是否会备份视图呢?
    mysqldump工具,通过--where选项,导出指定表中指定数据?
    mysql数据库中,通过mysqladmin工具,创建数据库
    mysql数据库中,查看某个数据库下的表的存储类型都有哪些
    Oracle体系结构之rac内存管理
    Oracle HA 之 Server Pool 实战
    Oracle HA 之 SERVICE和DRM实战
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/11240797.html
Copyright © 2011-2022 走看看