Python拼写建议功能运行报ZeroDivisionError除零错误求解
拼写纠错得分计算ZeroDivisionError报错修复方案
核心错误原因
- 运算符误用:Python中
^是按位异或运算符,你预期的平方运算应该使用** 2实现,错误的运算符会导致s的计算结果严重不符合预期,甚至出现0值 - 未做除零防护:当
s的计算结果为0时,分母s^2为0直接触发除零报错 - 代码残留脏数据:多处
enter code here无效字符、切片表达式缺少运算符会额外触发语法错误
具体修复步骤
- 第一步:清理所有无效的
enter code here字符,补全切片位置缺失的减号 - 第二步:将所有平方计算的
^ 2替换为** 2 - 第三步:计算得分前增加分母非零判断,s为0的场景可以自定义兜底得分(比如设置为0直接触发后续的低得分过滤逻辑)
修复后完整代码
import time for word in typo.keys(): for sug in typo[word].getSuggestion().keys(): # 计算公共前后缀长度之和s s = (typo[word].getErrorIndexFront() - 1) + (len(word) - typo[word].getErrorIndexRear() + 1) n1 = len(word) n2 = len(sug) u1 = 0 u2 = 0 if n1 == n2: # 补全切片位置的减号 slice_part = word[(typo[word].getErrorIndexFront() - 1):(len(word) - typo[word].getErrorIndexRear() + 1)] u1 = len(slice_part) u2 = u1 else: u2 = abs(n2 - n1) # 修复平方运算符 + 除零防护 s_square = s ** 2 if s_square == 0: # s为0时兜底设为0,后续会被过滤掉 score = 0 else: score = (s_square - ((n2 - n1) ** 2) - ((u1 + u2) ** 2)) / s_square typo[word].getSuggestion()[sug] = score print(typo[word].getSuggestion()[sug]) for k,v in list(typo[word].getSuggestion().items()): if v <= 0: del typo[word].getSuggestion()[k] print("time = ",(time.time() - startTime)," s")
内容的提问来源于stack exchange,提问作者Lutfi Aish
相关产品推荐
相关产品推荐

