You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:15:05