eval

ast.literal_eval(转)

让人想犯罪 __ 提交于 2019-12-03 07:48:17
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

ast.literal_eval

风流意气都作罢 提交于 2019-12-03 07:47:39
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

建议使用更加安全的ast.literal_eval去替代eval

前提是你 提交于 2019-12-03 07:46:55
前言 如果大家想要在python中将字符串转换成列表,数字,字典等操作,都会想到使用eval(),确实这个函数很好用,但是它却存在一定的安全性 eval的漏洞 如果用户使用如下的代码 open(r'D://filename.txt', 'r').read() __import__('os').system('dir') __import__('os').system('rm -rf /etc/*') 1 2 3 4 5 eval就会不管三七二十一,显示你电脑目录结构,读取文件,删除文件…..如果是格盘等更严重的操作,她也会照做不误! 更详细的情况可以参考这里 如何避免这个漏洞 可以使用ast.literal_eval,这个函数具有同样的eval()的功能,但是会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。 stackoverflow中的解释 参考 https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html https://blog.csdn.net/Jerry_1126/article/details/68831254 https://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast

python eval函数的安全替换品ast.literal_eval

我只是一个虾纸丫 提交于 2019-12-03 07:46:37
我们知道,要将一个字符串转换成对应的python类型可以使用eval()函数,但是这个函数有一定的安全漏洞(详细请参阅博客 python中eval函数的使用及安全性问题 ),容易被不法人员利用,因此python中出了一个安全处理方式ast.literal_eval(),先看下Stack Overflow和Python官网上对这个函数的解释 Stack Overflow Python 简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的Python类型,如果是则进行运算,否则就不进行运算。 比如下面查看系统文件的操作就会被拒绝,而只会执行合法的python类型,从而大大降低了系统的危险性 所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval() 来源: CSDN 作者: masserd 链接: https://blog.csdn.net/zoulonglong/article/details/80567680

eval和ast.literal_eval方法

左心房为你撑大大i 提交于 2019-12-03 07:46:03
一、eval函数 eval() 官方文档里面给出来的功能解释是:将字符串 string 对象转化为有效的表达式参与求值运算返回计算结果。 示例: >> > s = '8*8' >> > eval ( s ) 64 >> > eval ( '2+5*4' ) 22 >> > x = 1 >> > y = 4 >> > eval ( 'x+y' ) 5 >> > eval ( '98.9' ) 98.9 >> > eval ( '9.9\n' ) 9.9 >> > eval ( '9.9\n\t\r \t\r\n' ) 9.9 最有用的一个是 eval 可以将字符串转换成字典,列表,元组 >> > l = "[2,3,4,5]" >> > ll = eval ( l ) >> > ll [ 2 , 3 , 4 , 5 ] >> > type ( ll ) < type 'list' > >> > d = "{'name':'python','age':20}" >> > dd = eval ( d ) >> > type ( dd ) < type 'dict' > >> > dd { 'age' : 20 , 'name' : 'python' } >> > t = '(1,2,3)' >> > tt = eval ( t ) >> > type ( tt ) < type

Python中eval与ast.literal_eval区别

╄→гoц情女王★ 提交于 2019-12-03 07:45:43
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

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

元气小坏坏 提交于 2019-12-03 07:43:02
文章目录 一、eval 函数 二、ast.literal_eval 函数 一、eval 函数 Python中,如果要将字符串型的 list,tuple,dict 转变成原有的类型呢 ? 这个时候你自然会想到 eval eval 函数在 Python 中做数据类型的转换还是很有用的。 它的作用就是把数据还原成它本身或者是能够转化成的数据类型 string 转化为 list string 转化为 tuple stirng 转化为 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

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

空扰寡人 提交于 2019-12-03 07:40:29
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

Creating expression tree in R

吃可爱长大的小学妹 提交于 2019-12-03 07:26:13
问题 The substitute function in R creates a language object in the form of a tree that one can parse. How can I create the tree from scratch using list or else to then give it to eval? # substitute gives a tree representation of the expression a=1; b=2; e1 = substitute(a+2*b) eval(e1) #gives 5 as expected e1 # is type language e1[[1]] # this is `+` e1[[2]] # this is 'a' type symbol e1[[3]] # this is type language e1[[3]][[1]] # this is `*` etc.... I would like to know how I can reconstruct the e1

how to bind javascript function with OnClientClick event with Eval?

匆匆过客 提交于 2019-12-03 06:55:19
my link button - <asp:LinkButton runat="server" ID="lbtnEdit" Text="edit" OnClientClick="javascript:msgDisp('<%# Eval(LocationId).toString() %>')" /> and the javascript msgDisp is- <script type="text/javascript" language="javascript"> function msgDisp(lid) { alert(lid); } </script> but it is not giiving LocationId in pop but the whole string <%#......%> is comin in popup message. How can I pass Eval values in javascript. You can build the entire contents of OnClientClick as a string within the code brackets and it will output like you're expecting. <asp:LinkButton runat="server" ID="lbtnEdit"