PyCharm运行手势识别代码报AttributeError: 'NoneType'无split属性求解
报错原因
- 报错触发点为
split_sentence函数中调用text.split(" ")的代码行,根本原因是传入该函数的text变量为None,没有split属性。 - 代码中
text初始值为空字符串,但在满足「检测到有效手势轮廓、轮廓面积>10000、模型预测置信度>80%」三个条件时,会被重新赋值为get_pred_text_from_db(pred_class)的返回值。 get_pred_text_from_db函数仅在查询到数据库匹配记录时返回手势名称,若传入的pred_class在数据库的gestureisl表中不存在对应记录,函数没有显式返回值,默认返回None,导致后续调用split_sentence时传入空值触发报错。
修复方案
方案1:修改数据库查询函数,兜底返回空字符串
修改get_pred_text_from_db函数,查询无匹配结果时返回空字符串而非默认的None:
def get_pred_text_from_db(pred_class): conn = sqlite3.connect("gestureisl_db.db") cmd = "SELECT g_name FROM gestureisl WHERE g_id=" + str(pred_class) cursor = conn.execute(cmd) for row in cursor: return row[0] # 新增以下代码,无匹配结果时返回空字符串 return ""
方案2:调用split函数前做空值兼容处理
在调用split_sentence前对text做非空判断,兜底设为空字符串:
将原代码中
splitted_text = split_sentence(text, 2)
修改为:
splitted_text = split_sentence(text if text is not None else "", 2)
可选根因排查
如果业务上不应该出现查询不到的情况,可以额外检查以下两点:
- 确认
gestureisl_db.db数据库的gestureisl表中,g_id字段覆盖了模型所有可能输出的分类id - 检查模型输出的分类id范围和数据库中存储的
g_id范围是否完全匹配
内容的提问来源于stack exchange,提问作者Reetika Bhanushali
相关产品推荐
相关产品推荐

