条件判断未达预期:int与NoneType比较TypeError异常求助
分析你的TypeError异常原因及排查方案
从你描述的情况和异常信息来看,虽然你在my_callback里做了"两个字段均不为None"的判断,但依然出现int与NoneType的比较错误,核心原因大概率是你的判断逻辑没有真正拦住空值,或者字段在判断后到计算前被意外修改成了None,具体可以从这几个方向排查:
1. 判断逻辑存在疏漏
最常见的问题是判断语句写得不严谨,比如:
- 你可能写成了
if resultat_upper and resultat_lower:,而不是明确判断is not None。如果resultat_upper是合法的0(int类型),布尔判断会把它当成False,但如果是None也会是False——但你的异常是int和None的比较,所以更可能是你只判断了其中一个字段,或者逻辑运算符用错了(比如把and写成了or)。 - 正确的严谨判断应该是:
if resultat_1_hz_upper is not None and resultat_1_hz_lower is not None: # 执行你的计算逻辑
2. 变量在判断后被意外修改
你在判断时两个字段都有值,但到执行计算的瞬间,下方的RESULTAT 1 HZ字段被其他代码改成了None:
- 比如你的回调函数是异步执行的,或者存在多线程/多进程场景,其他逻辑在你判断后重置了这个字段;
- 或者回调函数内部的某些步骤(比如日志、状态更新)不小心覆盖了该字段的值。
3. 字段名称存在混淆
看起来是同一个字段名"RESULTAT 1 HZ",但上下两个字段对应的变量名可能有细微差异:
- 比如大小写(
Resultat 1 HzvsRESULTAT 1 HZ)、多余的空格、下划线(resultat_1_hzvsresultat1_hz),导致你判断的是一个有值的变量,实际计算的却是另一个未赋值的None变量。
快速排查步骤
- 在判断后立即打印字段值和类型:在计算代码前添加两行打印,确认此时两个字段的状态:
if resultat_1_hz_upper is not None and resultat_1_hz_lower is not None: print(f"Upper RESULTAT 1 HZ: {resultat_1_hz_upper}, 类型: {type(resultat_1_hz_upper)}") print(f"Lower RESULTAT 1 HZ: {resultat_1_hz_lower}, 类型: {type(resultat_1_hz_lower)}") # 你的计算代码
如果打印结果里出现None,说明判断逻辑有问题;如果打印都是int但还是报错,那就是字段被后续代码修改了。
检查所有修改该字段的代码:搜索项目中所有赋值给下方
RESULTAT 1 HZ字段的地方,看有没有在回调执行期间触发的赋值操作。验证判断逻辑的正确性:把判断条件单独拿出来测试,比如模拟其中一个字段为
None,看是否会进入计算分支。
内容的提问来源于stack exchange,提问作者khashashin
相关产品推荐
相关产品推荐

