Python生成字符直方图代码触发KeyError错误如何修复
Python字符直方图代码报错修复方案
问题根因
- 集合内置的
remove()方法要求目标元素必须存在于集合中,当输入文本没有逗号、句号等你要剔除的字符时,调用remove()就会触发KeyError - 原代码存在隐藏变量未定义问题:
charHistogram函数定义的入参是data,但函数内部直接调用了未传入的filename变量,就算不触发KeyError也会运行报错
修复后的完整代码
def letterhelper(content): r = list(content) c_r = set(r) # 用discard代替remove,元素不存在时不会抛错 c_r.discard(' ') c_r.discard(',') c_r.discard('.') c_r.discard('\n') f = [] for x in c_r: f.append([-r.count(x), x]) return f def charHistogram(filename: str): # 用with上下文管理器自动关闭文件,避免资源泄漏 with open(filename, 'r', encoding='utf-8') as r: q = r.read() g = letterhelper(str.lower(q)) for t in sorted(g): print(t[1], (-t[0]) * '+')
核心修改说明
- 把所有
c_r.remove()替换为c_r.discard():discard方法在目标元素不存在时会直接跳过执行,不会抛出异常,适配所有文本内容场景 - 修正了
charHistogram的参数定义,将入参明确为filename: str,和内部逻辑匹配 - 新增
with上下文管理器管理文件打开操作,执行完自动释放文件资源,更符合Python开发规范 - 修正了
letterhelper的参数命名,原参数名filename容易产生误解,改为content明确是接收文本内容
内容的提问来源于stack exchange,提问作者jordan parker
相关产品推荐
相关产品推荐

