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

Python代码触发TypeError求助:基于size返回值至其他函数失败

问题排查与修复

先梳理你代码里的几个关键问题,这些问题会直接导致运行错误:

1. 缩进错误

  • get_min函数里第一个if语句的缩进不正确,和后续elif、else的缩进层级不一致,会触发语法错误。
  • evaluate函数里的return result缩进错误,应该和函数内其他语句保持同一层级。

2. 未定义变量

  • get_min的else分支中,return a里的a从未被赋值,当size不在4-8范围内时,会触发NameError。
  • evaluate函数中用到的BRANCH_WEIGHT、calculate、scale、get_max均未定义,需要确保这些变量/函数已提前实现。

3. 装饰器与变量命名问题

  • @lru_cache装饰器要求函数参数是可哈希类型(这里size是int没问题),但全局变量size和函数参数size重名,容易造成逻辑混淆,建议修改函数参数名,比如改成n。
  • 调用get_min(size)时,实际传入的是全局变量size的值(当前是4),如果这不是你预期的逻辑,需要确认传入的参数是否正确。

修复后的代码示例

from functools import lru_cache  # 注意导入lru_cache

size = 4 

@lru_cache
def get_min(n):  # 修改参数名避免和全局变量冲突
    if n == 4:
        a = 2
        return a
    elif n == 5:
        a = 3
        return a
    elif n == 6:
        a = 4
        return a
    elif n == 7:
        a = 5
        return a
    elif n == 8:
        a = 5
        return a
    else:
        # 处理size不在4-8的情况,比如返回默认值或抛出异常
        return 0  # 这里可以根据需求修改默认值

# 假设以下是你需要补充定义的内容
BRANCH_WEIGHT = 1.0

def calculate(sbox):
    # 实现你的calculate逻辑
    return 0

def scale(value, min_val, max_val):
    # 实现你的scale逻辑
    return value

def get_max(n):
    # 实现你的get_max逻辑
    return 10

def evaluate(sbox):
    result = 0
    
    branch = 0
    if BRANCH_WEIGHT > 0:
        branch = calculate(sbox)
        branch = scale(branch, get_min(size), get_max(size))
    result += BRANCH_WEIGHT * branch
    return result  # 修正缩进

额外提示

  • 如果你遇到的TypeError是提示get_min()缺少参数,检查调用时是否正确传入了size参数;如果是提示参数类型错误,确认传入的size是整数类型。
  • 使用@lru_cache时,必须导入functools模块,否则会触发NameError。

内容的提问来源于stack exchange,提问作者Meaad Tori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:19