python - 如何在不计算的情况下验证数学表达式语法
问题描述
我正在尝试在 Python 3 中验证像(x + 5) * 3/y这样的数学表达式。我想用随机值替换 x 和 y,但在上面的示例中,如果 y 的 rand 值为 0,这将失败。
我搜索了如何在不评估结果的情况下验证表达式:
validate_expression("(x + 5) * 3/y hello world") # raise an exception
validate_expression("(x + 5) * 3/y") # do nothing
解决方案
只要您的表达式遵循 Python 规则,您就可以使用它ast
来验证它们:
import ast
expr = '(x + 5) * 3 ?'
try:
ast.parse(expr)
print('valid')
except SyntaxError:
print('invalid')
正如评论中正确指出的那样,由于这会验证任何 python 代码,而不仅仅是数学表达式,因此您需要遍历已解析的 AST 以确保它不包含您不想要的东西,例如内置函数。
推荐阅读
- ios - WKWebView 的“loadHTMLString”高度宽度问题
- function - SASS @function 在@mixin 中插入属性
- r - 使用 stringr str_extract R 提取复杂名称:处理“DE”、“VAN”
- repository - 如何过滤和删除自 2 年以来未更新的工件存储库
- c# - 如何仅从剃刀视图中的 List ViewModel 的 foreach 循环中获取第一项
- java - 如何使用 lambdas 正确制作多级地图?
- javascript - 选中某个复选框时,选中其他复选框
- android - 从产品构建中排除特定子模块
- excel - Excel 共享工作簿,自动/使用 vba 解决冲突或忽略
- java - 未为创建的新配置单元表创建分区文件