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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:28:02