Python3两类报错解决:int与NoneType比较及BMI条件判断问题
问题1:解决「'<' not supported between instances of 'int' and 'NoneType'」错误
嘿,这个错误我熟得很!本质就是你在尝试把一个整数(int)和None类型的值做大小比较——Python根本不允许这种跨类型的比较操作。
最常见的触发场景是:你调用了一个没有返回值的函数,默认情况下这类函数会返回None,然后你把这个返回值(也就是None)和整数放在一起用</>等比较运算符了。举个例子,如果你写了这样的代码:
def calculate_num(): print(10) # 只有print输出,没有return返回数值 result = calculate_num() if result < 5: # 这里result是None,和5(int)比较直接报错 print("Too small")
怎么解决?两步走:
- 先检查你的函数,确保它通过
return语句返回了你需要的数值,而不是只打印出来。上面的例子修正后应该是:
def calculate_num(): return 10 # 用return把数值返回出去 result = calculate_num() if result < 5: print("Too small")
- 另外,也要排查变量是否被正确赋值,有没有某个变量不小心变成了
None(比如忘记初始化,或者调用的函数确实可能返回None),这种情况下要先判断变量是否为None再做比较。
问题2:BMI计算代码的错误修正
你的BMI代码有两个核心问题,咱们一个个说:
1. 函数没返回BMI值,导致b是None
你的bmi函数只是打印了计算结果,但没有用return返回这个值——所以b = bmi(weight,height)这句里的b其实是None,这也是你后面用</>比较时出错的根本原因(和问题1是同一个坑!)。
2. 比较运算符写法错误
你提到的>+是无效的Python运算符,正确的“大于等于”应该是>=,“小于等于”则是<=。
给你修正后的完整代码,还补全了逻辑分支:
def bmi(w, h): return w / (h ** 2) # 把print改成return,让函数返回计算好的BMI值 weight = float(input('Weight (kg): ')) height = float(input('Height (m): ')) b = bmi(weight, height) if 18 < b < 25: print('Your weight is normal.') elif b <= 18: # 用<=覆盖刚好18的体重偏轻情况 print('You are underweight.') elif 25 <= b < 29: # 用<=25覆盖刚好25的超重起始值 print('You are overweight.') else: # 处理所有b>=29的情况,避免逻辑遗漏 print('You are obese.')
几个关键修正点:
- 把
bmi函数的print换成return,这样变量b才能拿到有效的BMI数值; - 替换了错误的
>+为正确的>=,同时调整了边界条件,确保所有数值情况都被覆盖; - 增加了
else分支,处理超出前面范围的情况,不会出现“没有匹配分支”的问题。
内容的提问来源于stack exchange,提问作者M.Love
相关产品推荐
相关产品推荐

