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

Python计算用户输入移动平均时触发TypeError NoneType解包报错问题

错误原因
  • 核心报错触发点:user_input函数触发ValueError异常后没有返回任何值,直接递归调用了main(),导致最初调用user_input的主函数拿到的返回值为None,尝试将None解包为三个变量时直接抛出TypeError: cannot unpack non-iterable NoneType object
  • 逻辑设计缺陷:你用递归调用main()的方式做输入重试,会不断堆叠调用栈,即使后续递归链路计算出了结果,上层调用链路的解包操作依然会触发报错,同时输入错误一次就要重填所有内容,使用体验很差。
修复后的可运行代码
def user_input():
    # 输入移动平均窗口大小
    while True:
        try:
            avg_size = int(input("请输入移动平均窗口大小(需小于样本数值数量):"))
            break
        except ValueError:
            print("警告:输入非法值,请输入整数!")
    # 输入样本数量
    while True:
        try:
            size = int(input("请输入样本数值的总数量:"))
            break
        except ValueError:
            print("警告:输入非法值,请输入整数!")
    # 输入样本元素
    user_list = []
    for i in range(size):
        while True:
            try:
                val = int(input(f"请输入第{i+1}个元素:"))
                user_list.append(val)
                break
            except ValueError:
                print("警告:输入非法值,请输入整数,重新输入当前元素!")
    return user_list, size, avg_size


def validation(size, avg_size):
    if size < avg_size:
        print("警告:移动平均窗口大小不能大于样本数量!")
        return False
    elif size == 0 or avg_size == 0 or size == 1:
        print("警告:当前参数无法计算移动平均!")
        return False
    else:
        print("参数校验通过!")
        return True


def mv_avg(li, size, a_s):
    avg_li = []
    for i in range(size):
        if i + 1 < a_s:
            avg_li.append(float('NaN'))
        else:
            avg_li.append(sum(li[(i - a_s + 1):i + 1]) / a_s)
    print(f"计算得到的{a_s}窗口移动平均结果如下:{avg_li}")


def main():
    while True:
        value_list, size, avg_size = user_input()
        if validation(size, avg_size):
            break
    mv_avg(value_list, size, avg_size)


if __name__ == "__main__":
    main()
修复说明
  • 每个输入环节单独做循环重试,输入错误时只会要求重输当前项,不需要从头重新输入所有内容
  • 移除了所有函数内递归调用main()的错误逻辑,校验不通过时返回布尔值让主循环控制重试
  • 异常处理范围更精准,不会因为单个元素输入错误清空已经输入的内容
  • 解包操作永远可以拿到正确的三个返回值,不会再触发None解包的报错

内容的提问来源于stack exchange,提问作者Kriti Dixit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:24:03