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中文网其它相关文章!

ast.literal_eval(转)的更多相关文章

  1. python中使用eval() 和 ast.literal_eval()的区别 分类: Python 2015-05-11 15:21 1216人阅读 评论(0) 收藏

    eval函数在python中做数据类型的转换还是很有用的.它的作用就是把数据还原成它本身或者是能够转化成的数据类型. 那么eval和ast.literal_val()的区别是什么呢? eval在做计算 ...

  2. Python eval 作用和风险 (string 转为dict list tuple)建议用“ast.literal_eval”

    a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" b = eval(a) print b [[1, 2], [3, 4], [5, 6], [7, ...

  3. ast.literal_eval(jsonStr) json格式字符串转dict 2种方式

    json.loads(jsonStr, encoding='utf-8')import ast ast.literal_eval(jsonStr)

  4. ast模块

    有这么一个需求,你想从文件中读取字典,方法有很多,这里用的是ast模块 import ast with open("account","r",encoding= ...

  5. python ast

    import ast print ast.literal_eval('[1, 2, 3]')print eval("2 + 3 * len('hello')") == 17prin ...

  6. Python:eval的妙用和滥用

    时间 2014-07-08 13:05:24 CSDN博客 原文  http://blog.csdn.net/zhanh1218/article/details/37562167 主题 Python ...

  7. python 编码问题

    参考原文:http://www.crifan.com/eclipse_pydev_console_messy_char_for_console_is_utf8/ 通用 rq = urllib.urlo ...

  8. Python2.7.6标准库内建函数

        Built-in Functions     abs() divmod() input() open() staticmethod() all() enumerate() int() ord( ...

  9. python 拾贝

    1. 内建的 type() 函数带三个参数时, 将作为强悍的动态类构造器. 如下:   type(name, bases, dict) 返回一个新的type对象. 基本上是 class 语句的动态形式 ...

随机推荐

  1. 你不知道的css各类布局(一)之固定布局、静态布局

    前言 当为大量用户设计网站时,设计人员必须考虑到访问者的差异: 屏幕分辨率, 浏览器的选择, 是否在浏览器最大化状态, 浏览器的额外工具栏的开启(历史记录,书签等), 操作系统和硬件. 我们知道css ...

  2. 导入java web项目时 web.xml第一行报错

    报错信息: Referenced file contains errors (http://java.sun.com/xml/ns/j2ee/j2ee_1_4.xsd). For more infor ...

  3. vue开发后台管理系统有感

    使用vue开发后台近一个月,今天终于完成得差不多了,期间也遇到很多的问题,所以利用现在的闲暇时间做个总结 使用element-ui基础,这次使用了vue-element-admin(github地址) ...

  4. The last packet successfully received from the server was 39,900 milliseconds ago问题解决

    1,之前用Mysql或者mycat的时候都没有这个问题.后来改为haproxy+keepalived+mycat后出现这个问题 2,网上查了很多说法,我按照网上说的改了 datasource: url ...

  5. VSCode主题自定义(附详细注释及本人主题分享)

    先来一张本人自己配置的主题截图,喜欢的拿去用: 下面说说怎么自定义主题: 1.     Ctrl + ,(Ctrl键 + 逗号键):打开设置,也可以依次点击编辑器左上角 => 文件 => ...

  6. Js-声明变量

    JS声明变量 js声明变量的方式有3种:let,const,var 1.const如果定义简单数据类型,变成常量,变量值不可以更改. const name="lili"; name ...

  7. 微信小程序返回箭头跳转到指定页面

    onUnload: function () { wx.reLaunch({ url: '../me/order-detail', }) },//这里url搞相对路径 wx.reLaunch跳到新页面没 ...

  8. python连接oracle导出数据文件

    python连接oracle,感觉table_list文件内的表名,来卸载数据文件 主脚本: import os import logging import sys import configpars ...

  9. python之判断和循环

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,可以用if语句实现: age = : print ('your age i ...

  10. Java反射【一、概述】

    .net也使用过反射,不过用的比较浅显,用来记日志等.. Java基础课程学习已经过了一段时间了,接下来继续学习 本次学习包含以下内容 Java反射[一.概述] Java反射[二.Class类的使用] ...