Python S表达式计算器报错'int' object is not subscriptable的解决方法
问题分析
你的代码触发TypeError有两个核心原因:
- 误用全局变量:函数第一行
print(expression[0])直接引用全局变量expression而非传入的参数expr,当全局变量是整数时,会直接触发下标操作错误。 - Python元组语法陷阱:
expression = (7)在Python中不是元组,只是被括号包裹的整数(等价于7),真正的单元素元组需要加逗号:(7,);同时你的代码未处理单元素表达式的情况。
修复后的代码
def calc(expr): # 处理纯整数输入 if isinstance(expr, int): return expr # 处理单元素元组(合法的单值S表达式) elif isinstance(expr, tuple) and len(expr) == 1: return calc(expr[0]) # 处理加法操作 elif expr[0] == '+': return calc(expr[1]) + calc(expr[2]) # 处理乘法操作 elif expr[0] == '*': return calc(expr[1]) * calc(expr[2]) else: raise ValueError("Unknown operator: %s" % expr[0]) # 测试用例 # 纯整数输入 expression = 7 print(calc(expression)) # 输出7 # 单元素元组输入 expression = (7,) print(calc(expression)) # 输出7 # 复杂表达式输入 expression = ('+', ('*', 3, 4), 5) print(calc(expression)) # 输出17
关键修复点
- 移除全局变量引用,所有逻辑基于函数参数
expr - 新增单元素元组的处理逻辑,兼容合法的单值S表达式
- 调整判断顺序,优先处理最基础的整数和单元素情况,再处理操作符逻辑
内容的提问来源于stack exchange,提问作者Reactoo
相关产品推荐
相关产品推荐

