实验一:
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’)();
个人初步猜测是由于安全原则导致的,如果函数内部有危险操作就无法被检测到