python中使用eval() 和 ast.literal_eval()的区别

eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型。

那么eval和ast.literal_val()的区别是什么呢?

eval在做计算前并不知道需要转化的内容是不是合法的(安全的)python数据类型。只是在调用函数的时候去计算。如果被计算的内容不是合法的python类型就会抛出异常。

ast.literal则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

------------------------------引用自stackoverflow--------------------------------

datamap = eval(raw_input(‘Provide some data here: ‘) means that you actually evaluate the code before you deem it to be unsafe or not. It evaluates the code as soon as the function is called. See also the dangers of eval.

ast.literal_eval raises an exception if the input isn‘t a valid Python datatype, so the code won‘t be executed if it‘s not.

Use ast.literal_eval whenever you need eval. If you have Python expressions as an input that you want to evaluate, you shouldn‘t (have them).


shareedit

edited Mar 4 ‘13 at 8:59

answered Mar 4 ‘13 at 8:52

Volatility
13.4k32653

add a comment

时间: 2024-09-27 04:34:05

python中使用eval() 和 ast.literal_eval()的区别的相关文章

Python中的eval()、exec()及其相关函数

Python中的eval().exec()两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是

python中_、__和__xx__的区别

python中_.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家. 英文原文地址:Difference between _, __ and __xx__ in Python 在学习Python时,很多人都弄不清楚各种下划线的意思,而且在这之前已经给其他人解释过很多遍了,是时候把它记录下来. "_"单下划线 Python中不存在真正的私有方法.为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不

[转]Python中的eval()、exec()及其相关函数

刚好前些天有人提到eval()与exec()这两个函数,所以就翻了下Python的文档.这里就来简单说一下这两个函数以及与它们相关的几个函数,如globals().locals()和compile(): 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, local

Python中的eval(),exec()以及其相关函数

1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是字符串,也可以是一个任意的code对象实例(可以通过compile函数创建).如果它是一个字符串,它会被当作一个(使用globals和lo

Python中的eval()、exec()及其相关函数(转)

原作者:https://www.cnblogs.com/yyds/p/6276746.html 1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式比较相似. 函数定义: eval(expression, globals=None, locals=None) 参数说明: expression:必选参数,可以是字符串,也可以是一个任意的code对象实例

eval与ast.literal_eval

原文:https://blog.csdn.net/sun2333/article/details/82418326 1.eval可以字符串型的list,tuple,dict转变成原有的类型 (1)string <=> list In [1]: s = '[1, 2, 3, 4]' In [2]: l = eval(s) In [3]: s Out[3]: '[1, 2, 3, 4]' In [4]: l Out[4]: [1, 2, 3, 4] In [5]: type(s) Out[5]:

Python中元组,列表,字典的区别

Python中,有3种内建的数据结构:列表.元组和字典.1.列表     list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表.一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目.由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的.实例:#coding=utf-8animalslist=['fox','tiger','ra

Python基础学习-Python中最常见括号()、[]、{}的区别

Python中最常见括号的区别: 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. Python中的小括号(): 代表tuple元祖数据类型,元祖是一种不可变序列.创建方法很简单,大多数时候都是小括号括起来的. 1 >>> tup = (1,2,3) 2 >>> tup 3 (1, 2, 3) 4 >>> () #空元祖 5 () 6 >>&

关于python中赋值、浅拷贝、深拷贝之间区别的深入分析

大家都知道,在python中复制一个对象有多种方法,其中常用的是赋值.浅拷贝和深拷贝,这三者之间有哪些区别和哪些坑呢? 首先,定义一下: 赋值:  a =1    b =a    a赋值给了b 浅拷贝: a = []  b = a.copy() 或者import copy             b = copy.copy(a) 深拷贝:import copy  a = []   b = copy.deepcopy(a) 未完待续