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)
欢迎来到testingpai.com!
注册 关于