可以使用 python 中的 eval()
函数,举例如下,我需要将大模型输出字符串转换为 numpy 数据类型
import numpy as np
import ast# 原始字符串
s = "[(-0.014,0.009),(0.005,-0.027),(-0.008,0.006),(-0.014,0.014)]"# 安全地解析字符串中的表达式
parsed_tuple_list = ast.literal_eval(s)# 将元组列表转换为NumPy数组
np_array = np.array(parsed_tuple_list)print(np_array)
python中自带的 eval()
函数可以完成此功能,但由于 ast.literal_eval()
更加安全,原因是 eval()
无法判断用户输入是否为恶意代码,比如用户输入 eval("__import__('os').system('rm -rf /')"
会导致删除服务器上所有文件。当然我们可以加入安全限制解决这个问题,比如:
# 定义一个安全的执行环境
safe_globals = {'__builtins__': { # 允许使用特定的内置函数'abs': abs,'min': min,'max': max,},'math': math, # 允许使用 math 模块
}# 定义一个包含合法操作的表达式
expression = "max(abs(-3), math.sqrt(16))"# 使用 eval 执行字符串中的表达式,并传入安全的环境
result = eval(expression, safe_globals)print(result) # 输出: 4.0