python-eval-literal_eval-使用测试

import os
from ast import literal_eval

test_a = '{"name":1}'
print(eval(test_a), type(eval(test_a)))
# {'name': 1} 

print(literal_eval(test_a), type(literal_eval(test_a)))
# {'name': 1} 




try:
    test_a = "__import__('os').remove('1.txt')"
    print(eval(test_a))     # None
    print(os.path.exists('1.txt'))  # False
except Exception as e:
    print("eval", ValueError(e))


try:
    test_a = "__import__('os').remove('2.txt')"
    print(literal_eval(test_a))
    print(os.path.exists('2.txt'))
except Exception as    e:
    print("literal_eval", ValueError(e))  # literal_eval malformed node or string: 

执行前

在这里插入图片描述

执行后

在这里插入图片描述

控制台输出

python-eval-literal_eval-使用测试_第1张图片


eval()

简单来说就是回去指定任意类型的命令。无论是转换类型 还是 python 语句.


ast.literal_eval

https://peps.python.org/pep-0518/ 这是介绍地址.
python-eval-literal_eval-使用测试_第2张图片

https://docs.python.org/3/library/ast.html#ast.literal_eval literal_eval部分说明
python-eval-literal_eval-使用测试_第3张图片


https://stackoverflow.com/questions/15197673/using-pythons-eval-vs-ast-literal-eval 有讨论组

其中还是建议升级高版本的python.


总结

ast. literal_eval 并没有说明是绝对安全的,只是申明了更安全一些,所以在使用过程中还是需要进行注意.

你可能感兴趣的:(python,python)