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

原创 2015年05月11日 15:21:42

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

判断python 列表/字典深层key是否存在的方法

从接口获取的json数据,有时会非常复杂,有很多层,可能还是列表和字典嵌套的。这个时候若要判断深层次的一个是否存在。则比较麻烦了 特把这些判断封装为一个通用的方法,以后备用 [pyth...
  • JIESA
  • JIESA
  • 2017-01-26 15:48
  • 1020

Python中eval与ast.literal_eval区别

Python中,如果要将字符串型的list,tuple,dict转变成原有的类型呢? 这个时候你自然会想到eval. eval函数在Python中做数据类型的转换还是很有用的。它的作用就是把数据还原成...

AST 模块:用 Python 修改 Python 代码

本文介绍如何利用Python的AST模块得到或者修改python虚拟机编译过程中生成的语法树 CPython 的编译过程 在开始之前,我们应该先看看 CPython 的编译过程,这个过程在...

初学者必知的Python中优雅的用法

本文由 伯乐在线 - 淘小米 翻译,Daetalus 校稿。未经许可,禁止转载!英文出处:freepythontips.wordpress.com。欢迎加入翻译小组。Hi 朋友们。由于我最近都比较忙,...

Python:eval的妙用和滥用

eval()函数十分强大,官方demo解释为:将字符串str当成有效的表达式来求值并返回计算结果。 so,结合math当成一个计算器很好用。 其他用法,可以把list,tuple,dict和strin...

Python学习笔记(五)—LOOP 循环

个人认为Python基础学习直到LOOP才算真正开始。 循环有While, do-while, 和for() 比如while 我们要输出100条“you are my sunshine ”可以表达如下...

py-faster-rcnn源码解读系列(一)——train_faster_rcnn_alt_opt.py

@: train_faster_rcnn_alt_opt.py前言:本文主要功能是实现Alternating optimization的训练方法,在NIPS的那篇paper上仅有较为简略的介绍,所以我...

py-faster-rcnn源码解读系列(二)——pascal_voc.py

该部分代码功能在于实现了一个pascol _voc的类,该类继承自imdb,用于负责数据交互部分。

Linux0.11内核--内核空间、用户空间之间的数据传输

内核空间、用户空间之间的数据传输内核空间数据段的选择符为0x10,用户空间数据段选择符为0x17。内核空间、用户空间之间的数据传输,是段间数据传输。C语言中的赋值语句编译成汇编后,“=”两边的变量默认...

Python ast 学习笔记1–手动建ast

Python ast 学习笔记1–手动建ast手动建astpython中的ast模块是非常强大的模块,可以用来修改python源码,或者分析python源码。为了学习ast模块,先来手动建立一个ast...
  • sgoal
  • sgoal
  • 2017-03-15 20:33
  • 739
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)