You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python S表达式计算器报错'int' object is not subscriptable的解决方法

问题分析

你的代码触发TypeError有两个核心原因:

  1. 误用全局变量:函数第一行print(expression[0])直接引用全局变量expression而非传入的参数expr,当全局变量是整数时,会直接触发下标操作错误。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 05:00:31