转自:https://www.cnblogs.com/likui360/p/5770601.html
eval是python中一个相当智能的函数,把参数当成表达式,进行最大限度的解析,
比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"b = eval(a)bOut[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]type(b)Out[4]: lista = "{1: 'a', 2: 'b'}"b = eval(a)bOut[7]: {1: 'a', 2: 'b'}type(b)Out[8]: dicta = "([1,2], [3,4], [5,6], [7,8], (9,0))"b = eval(a)bOut[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0)) |
从以上可以看出,eval相当的好用,但是它也能解析一些输入命令,比如:
1 | eval("__import__('os').system('dir')") |
这样写会将当前目录下的文件全都显示出来,如果换成删除,那麻烦就大了。
所以,很多时候我们需要在转换前先检查下表达式的合法性,或者直接使用literal_eval,这个函数会自动的检查安全性和合法性,如果有问题就会直接抛出异常,使用literal_eval前要先导入ast。
本文介绍了Python中eval函数的强大功能及其潜在的安全风险,并对比了更安全的替代方案——literal_eval函数。通过实例展示了如何使用这两种函数来解析字符串并转换为Python数据结构。


被折叠的 条评论
为什么被折叠?



