Python中函数eval和ast.literal_eval的区别详解

 更新时间:2017年08月10日 11:11:37   作者:杰瑞26  
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爬虫+Tkinter制作一个翻译软件的示例

    Python爬虫+Tkinter制作一个翻译软件的示例

    这篇文章主要介绍了Python爬虫+Tkinter制作一个翻译软件的示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python更新数据库脚本两种方法及对比介绍

    Python更新数据库脚本两种方法及对比介绍

    这篇文章给大家介绍了Python更新数据库脚本两种方法及数据库查询三种方式,然后在文章下面给大家介绍了两种方式对比介绍,非常不错,感兴趣的朋友参考下吧
    2017-07-07
  • 基于Python制作简易视频播放器

    基于Python制作简易视频播放器

    本文将用python-pyqt5-opencv做出来的简易视频播放器,主要实现本地视频文件播放、本地摄像头播放和远程摄像头播放三个功能,需要的可以参考下
    2024-11-11
  • 基于Python绘制3D立体爱心图案的示例详解

    基于Python绘制3D立体爱心图案的示例详解

    这篇文章主要为大家详细介绍了利用Python实现绘制3D立体爱心图案的四种不同方法,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-11-11
  • Python object类中的特殊方法代码讲解

    Python object类中的特殊方法代码讲解

    在本篇文章里小编给各位整理了关于Python object类中的特殊方法代码讲解,需要的朋友们可以参考下。
    2020-03-03
  • 使用Docker部署Python的Flask项目最新教程

    使用Docker部署Python的Flask项目最新教程

    Flask是一个基于Python的Web框架,它的核心非常简单且易于扩展,这篇文章主要介绍了使用Docker部署Python的Flask项目的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • Python使用Matplotlib进行图案填充和边缘颜色分离的三种方法

    Python使用Matplotlib进行图案填充和边缘颜色分离的三种方法

    Matplotlib是Python中功能强大的绘图库,允许广泛的自定义选项,一个常见的要求是分离出图中的图案填充和边缘颜色,默认情况下,Matplotlib中的填充颜色与边缘颜色相关联,但有一些方法可以独立自定义这些颜色,本文将深入研究如何实现这一点的技术细节,并提供分步说明和示例
    2025-01-01
  • Python实现自动备份U盘内容

    Python实现自动备份U盘内容

    在日常工作和学习中,U盘作为便携存储设备被广泛使用,但同时也面临着数据丢失的风险,所以本文将带大家从零开始实现一个智能U盘自动备份工具,感兴趣的可以了解下
    2025-04-04
  • Tensorflow卷积神经网络实例

    Tensorflow卷积神经网络实例

    这篇文章主要为大家详细介绍了Tensorflow卷积神经网络实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Python装饰器使用实例:验证参数合法性

    Python装饰器使用实例:验证参数合法性

    这篇文章主要介绍了Python装饰器使用实例:验证参数合法性,本文直接给出代码实例,代码中包含详细注释,需要的朋友可以参考下
    2015-06-06

最新评论