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

Python遍历列表打印库存时末尾异常输出None问题排查

问题原因

末尾输出None来自Python的默认函数行为,同时代码里还存在一个隐藏逻辑bug:

  • 核心诱因:Python中如果函数没有写显式的return语句,执行完后会默认返回None。你调用find_invontory()的时候用了print(find_invontory())的写法,函数内部已经实现了所有库存内容的打印逻辑,外层的print会把函数默认返回的None额外打印一次,就会在所有库存内容的最后多出一行None。
  • 隐藏bug:store_items列表里包含Fort、Turret、Bomb Shelter三个防御建筑项,但collection()函数的分支判断里没有写这三个项对应的取值规则,调用到这三个项时函数也会默认返回None,不修复的话这三个建筑的持有数量会显示为None。
  • 额外提示:代码里存在多处拼写错误,比如invontory应为inventory、Missle应为Missile、BUILINGS应为BUILDINGS,不影响运行但会提升后续维护的出错概率。
修复方案
  1. 调整函数调用方式:去掉包裹find_invontory()的print(),直接调用函数即可:
    # 错误写法
    # print(find_invontory())
    # 正确写法
    find_invontory()
    
  2. 补全collection()函数缺失的分支,建议增加兜底返回避免后续漏写分支:
    def collection(var_needed):
      if var_needed == "get_items_bought":
        return total_items_bought
      elif var_needed == "get_money_spent":
        return money_spent
      elif var_needed == "get_Infantry":
        return infantry
      elif var_needed == "get_Tank":
        return tanks
      elif var_needed == "get_Aircraft":
        return air_craft
      elif var_needed == "get_Atomic Missle":
        return AM
      elif var_needed == "get_Hydrogen Missle":
        return HM
      elif var_needed == "get_Defence Garrison":
        return defence_troops
      elif var_needed == "get_Land Mines":
        return land_mines
      elif var_needed == "get_Anti Aircraft":
        return anti_aircraft
      elif var_needed == "get_Laser Cannon":
        return Lcannons
      elif var_needed == "get_Walls":
        return 1 if walls else 0
      elif var_needed == "get_Fort":
        return 1 if fort else 0
      elif var_needed == "get_Turret":
        return 1 if turret else 0
      elif var_needed == "get_Bomb Shelter":
        return 1 if bomb_shelter else 0
      # 兜底返回,避免遗漏分支返回None
      return 0
    
  3. (可选优化)把find_invontory()里写死列表索引的标题判断改成集合判断,避免后续增减物品时数错索引:
    # 把分类标题、分隔线统一存在集合里
    skip_get_value = {"ATTACK UNITS", "DEFENCE UNITS", "DEFENCE BUILINGS", "-----------------"}
    for item in store_items:
        if item in skip_get_value:
            invontory_lines.append(item)
        else:
            # 原有拼接行的逻辑保持不变
            sps = ""
            CCmd = "get_" + item
            IG = collection(CCmd)
            number = len(item)
            while number < 19:
                sps += " "
                number += 1
            invontory_lines.append(item + ":" + sps + str(IG))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:48:21