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
相关产品推荐
相关产品推荐

