栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

安全地评估简单的字符串方程式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安全地评估简单的字符串方程式

一种方法是使用numexpr。它主要是用于优化(和多线程)numpy操作的模块,但它也可以处理数学python表达式:

>>> import numexpr>>> numexpr.evaluate('2 + 4.1 * 3')array(14.299999999999999)

您可以调用

.item
结果以获取类似python的类型:

>>> numexpr.evaluate('17 / 3').item()5.666666666666667

它是一个第三方扩展模块,因此在这里可能会完全被淘汰,但是它绝对比其他应用程序更安全,

eval
并且支持许多功能(包括
numpy
math
操作)。如果还支持“变量替换”:

>>> b = 10>>> numexpr.evaluate('exp(17) / b').item()2415495.27535753

python标准库的一种方法,尽管非常有限

ast.literal_eval
。它适用于Python中最基本的数据类型和文字:

>>> import ast>>> ast.literal_eval('1+2')3

但是以更复杂的表达式失败,例如:

>>> ast.literal_eval('import os')SyntaxError: invalid syntax>>> ast.literal_eval('exec(1+2)')ValueError: malformed node or string: <_ast.Call object at 0x0000023BDEADB400>

不幸的是,除了

+
-
不可能的任何运算符:

>>> ast.literal_eval('1.2 * 2.3')ValueError: malformed node or string: <_ast.BinOp object at 0x0000023BDEF24B70>

我在此处复制了部分文档,其中包含受支持的类型:

安全地评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值和无。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号