如何解决Python表达式求值时出现的前导零语法错误
问题原因
Python3 不允许十进制整数字面量携带前导零,因此直接运行eval("30+05")会触发SyntaxError: leading zeros in decimal integer literals are not permitted语法错误。同时你原代码中的Print首字母大写不符合Python语法要求,需要改为小写的print。
实现方案
方案1:正则表达式快速替换
适用于绝大多数简单四则运算场景,通过正则匹配数字串去除前导零:
import re Solve = "30+05" # 规则:匹配数字串的前导零,仅保留后面的有效数字 processed_Solve = re.sub(r'\b0+(\d+)\b', r'\1', Solve) print(eval(processed_Solve)) # 输出结果:35
正则逻辑说明:
\b匹配单词边界,避免误删数字中间的00+(\d+)捕获开头零之后的有效数字部分- 特殊场景如
"000+008"会被处理为"0+8",不会出现空值错误
方案2:拆分表达式逐个处理
适用于带括号、多运算符的复杂表达式场景,精准处理每一个数字项:
import re Solve = "30+05*(100-009)/03" # 拆分所有数字和运算符为独立token tokens = re.findall(r'\d+|[+\-*/()]', Solve) processed_tokens = [] for token in tokens: if token.isdigit(): # 数字项转int自动去前导零后再转回字符串 processed_tokens.append(str(int(token))) else: processed_tokens.append(token) processed_Solve = ''.join(processed_tokens) print(eval(processed_Solve)) # 输出结果:181.66666666666666
注意事项
- 若表达式包含八进制、十六进制等非十进制数字,需要调整正则匹配规则适配对应场景
- 生产环境使用
eval执行输入表达式存在代码注入风险,仅建议在可信输入场景下使用
内容的提问来源于stack exchange,提问作者Anshul
相关产品推荐
相关产品推荐

