literal_eval不能执行函数及其本质

本文通过两个实验展示了Python中的`eval()`和`literal_eval()`函数在执行字符串为函数调用时的区别。实验表明`eval()`可以执行字符串表示的函数,而`literal_eval()`则不能,推测原因可能涉及安全考虑,避免执行潜在的危险代码。
摘要由CSDN通过智能技术生成

实验一:

from ast import literal_eval
def a1():
    print('a1')

def a2():
    print('a2')
for i in [1, 2]:
    eval(f'a{i}')()
    eval(f'a{i}()')
 输出结果:
 a1
a1
a2
a2

实验二:

from ast import literal_eval
def a1():
    print('a1')

def a2():
    print('a2')
for i in [1, 2]:
    eval(f'a{i}')()
    eval(f'a{i}()')
    literal_eval(f'a1')
    

在这里插入图片描述

在这里插入图片描述

结论:

literal_eval不可以用来将字符串转换成函数: literal_eval(‘fun_name’)();
个人初步猜测是由于安全原则导致的,如果函数内部有危险操作就无法被检测到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值