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} <class 'dict'>

print(literal_eval(test_a), type(literal_eval(test_a)))
# {'name': 1} <class 'dict'>




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: <ast.Call object at 0x000001FA43202EE0>

执行前

在这里插入图片描述

执行后

在这里插入图片描述

控制台输出

在这里插入图片描述


eval()

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


ast.literal_eval

https://peps.python.org/pep-0518/ 这是介绍地址.
在这里插入图片描述

https://docs.python.org/3/library/ast.html#ast.literal_eval literal_eval部分说明
在这里插入图片描述


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

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


总结

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值