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

