eval 函数与 ast.literal_eval 函数

本贴最后更新于 794 天前,其中的信息可能已经时移俗易

eval()函数

在python中作为转化字符类型很好用,可以把str类型的list,tuple,dict转成原来的类型;也可以进行计算;

1、转成list

list_str = '[1,2,3,4,"a"]'

new_list_str = eval(list_str)

print(new_list_str,type(new_list_str))

===>>>[1,2,3,4,"a"]

===>>>class list

2、转成dict

dict_str = '{"key1":"value1","key2","value2"}'

new_dict_str = eval(dict_str)

print(new_dict_str,type(new_dict_str))

===>>>{"key1":"value1","key2","value2"}

===>>>class dict

3、计算

a = eval("1+1")

print(a)

===>>>2

从上面来看,eval功能可谓非常强大,即可以做 string 与 list,tuple,dict 之间的类型转换,还可以做计算器使用!
更有甚者,可以对她能解析的字符串都做处理,而不顾忌可能带来的后果!
比如说,用户恶意输入下面的字符串
open(r', 'r').read()
import('os').system('dir')
import('os').system('rm -rf /etc/*')
此时eval就会显示你电脑目录结构,读取文件,删除文件…

所有为了程序的安全着想,建议使用ast.literal_eval函数

ast.literal_eval()函数

1、ast.literal_eval()函数需要先导入 ast包

import ast

2、把以下response进行转型

response = '{"key1":"value1","key2","value2"}'

new_response = ast.literal_eval(response)

#就可以直接把str转成dict类型了

备注:我们在自动化测试中,往往需要从excel读取测试数据,此时从excel读取的数据都是str类型,我们可以把读取的数据进行转型,或者当我们需要对相应结果进行处理的时候,也可以根据情况把处理的相应结果进行转型,方便后续参数传递或者进行相应结果的断言;

new_dict = response if isinstance(response,dict) else ast.literal_eval(response)

1 操作
13720245816 在 2022-09-20 09:46:37 更新了该帖
回帖
请输入回帖内容 ...