Python字符串空白空值校验中np.NaN布尔判断为真的原因及解决方法
问题产生原因
Python 中 np.NaN 的布尔值判定结果为 True。Python 仅对None、数值0、空序列/空容器(空字符串、空列表、空字典等)判定布尔值为False,np.NaN不属于上述范围,因此if check会直接进入True分支,输出tru。
额外注意你代码中存在笔误:函数定义时名称为check_for_empty_spaces,后续调用时全部写成了check_for_empty_strings,实际运行前需要先修正该问题。
正确校验方案
你可以根据需求二选一:
方案1:调整函数返回值为Python原生空值(更推荐)
将原函数返回np.NaN的逻辑改为返回Python原生空值None,即可直接用if check完成判断,符合Python的常规开发习惯,代码如下:
def check_for_empty_spaces(val): val = val.rstrip() return val if len(val) > 0 else None
修改后你原有校验代码if (check)即可正常运行:非空字符串判定为True,None判定为False,完全匹配你的校验需求。
方案2:保留返回np.NaN的逻辑,新增NaN判断
如果业务要求必须返回np.NaN,校验时需要额外判断值是否为NaN,代码如下:
import numpy as np check = check_for_empty_spaces('') # 先判断是否为NaN,再判断是否为有效值 if not (isinstance(check, float) and np.isnan(check)) and check: print('tru') print(check) else: print('dsj')
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

