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

Python自定义State类运行报float与NoneType不可比较TypeError求助

问题原因
  • 自定义的increase_population、decrease_population两个实例方法没有显式设置返回值,Python中无return语句的函数默认返回None
  • 测试代码中错误将两个方法的返回值赋值给了il.population属性,执行完il.population = State.increase_population(il, 1)后,原本的人口数值直接被覆盖为None
  • 后续调用decrease_population时,代码尝试对比float类型的numPeople和None类型的self.population,触发类型错误。
修复方案

优先调整测试代码的调用逻辑,删除不必要的赋值操作,同时将类调用实例方法的写法改为更规范的实例直接调用:

# 测试用例
# 创建伊利诺伊州对应的State实例il,邮编IL,人口12.8百万
il = State("Illinois","IL",12.8)

# 调用方法增加1百万人口,无需赋值给population属性
il.increase_population(1)

# 调用方法减少1.5百万人口,无需赋值给population属性
il.decrease_population(1.5)

如果需要保留原有赋值调用的写法,可以给两个实例方法增加返回人口数值的逻辑:

def increase_population(self, numPeople):
    """Increases the population of the state."""
    self.population += numPeople
    print("Population of",self.name,"increased to",self.population,"million.")
    # 新增返回当前人口数值
    return self.population

def decrease_population(self, numPeople):
    """Decreases the population of the state."""
    try:
        if (numPeople > self.population):
            raise ValueError("decrease_population(self, numPeople): Invalid value for population reduction")
        else:
            self.population -= numPeople
            print("Population of",self.name,"decreased to",self.population,"million.")
            # 新增返回当前人口数值
            return self.population
    except Exception as e:
        logging.exception(e)            

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:27:07