10.常见报错排查与基础调试

python 复制代码
# -*- coding: utf-8 -*-
"""
@Created on : 2026/4/24 11:44
@creator : er_nao
@File :Day_10.py
@Description :常见报错排查与基础调试
"""
# 导入需要的库
import jieba
import jieba.analyse

# 定义停用词列表
STOP_WORDS = ["的", "是", "在", "和", "有", "也", "就", "都", "而", "及", "与", "着", ",", "。", "!", "?", ";", ":", "、"," "]


# ---------------------- 封装可复用的NLP工具函数 ----------------------
# 函数1:文本分词+过滤停用词
def cut_text_and_filter(input_text):
    # 先做基础清洗
    clean_text = input_text.strip()
    # 用jieba精确模式分词
    words = jieba.lcut(clean_text)
    # 过滤掉停用词和空字符串
    valid_words = [word for word in words if word not in STOP_WORDS and word.strip() != ""]
    # 返回有效词语列表
    return valid_words


# 函数2:统计词频和占比
def count_word_frequency(valid_words):
    # 统计每个词语的出现次数
    word_count = {}
    for word in valid_words:
        if word in word_count:
            word_count[word] = word_count[word] + 1
        else:
            word_count[word] = 1
    # 计算总有效词数
    total_words = len(valid_words)
    # 计算每个词的占比
    word_ratio = {}
    if total_words > 0:
        for word, count in word_count.items():
            word_ratio[word] = round(count / total_words, 4)
    # 返回词频统计和占比
    return word_count, word_ratio, total_words


# 函数3:提取核心关键词
def extract_keywords(input_text, top_k=5):
    # 提取TopK核心关键词
    keywords = jieba.analyse.extract_tags(input_text, topK=top_k, withWeight=True)
    return keywords


# ---------------------- 主程序逻辑 ----------------------
if __name__ == "__main__":
    print("=== 带报错处理的NLP文本分词与词频统计工具 ===")
    # 持续接收用户输入
    is_running = True
    while is_running:
        # 接收用户输入
        input_text = input("\n请输入要处理的中文文本(输入「退出」结束程序):")
        # 判断是否退出
        if input_text.strip() == "退出":
            is_running = False
            print("程序结束,感谢使用!")
            continue

        # 核心处理逻辑,加入报错处理
        try:
            # 1. 分词+过滤
            valid_words = cut_text_and_filter(input_text)
            print(f"\n1. 有效分词结果:{valid_words}")

            # 2. 词频统计和占比
            word_count, word_ratio, total_words = count_word_frequency(valid_words)
            print(f"2. 总有效词数:{total_words}")
            print(f"3. 词频统计结果:{word_count}")
            print(f"4. 词语占比结果:{word_ratio}")

            # 3. 核心关键词提取
            keywords = extract_keywords(input_text, top_k=5)
            print("5. 文本核心关键词Top5:")
            for word, weight in keywords:
                print(f"   关键词:{word},权重:{round(weight, 4)}")

        # 捕获所有可能的报错,做对应的处理
        except NameError as e:
            print(f"【名称错误】:{e},请检查代码里的变量、函数名是不是拼写正确")
        except TypeError as e:
            print(f"【类型错误】:{e},请检查输入的文本是不是正确的字符串类型")
        except IndexError as e:
            print(f"【索引错误】:{e},请检查分词结果是不是空的")
        except KeyError as e:
            print(f"【键错误】:{e},请检查字典里的key是不是存在")
        except AttributeError as e:
            print(f"【属性错误】:{e},请检查jieba库是不是安装正确,版本是不是最新的")
        except ImportError as e:
            print(f"【导入错误】:{e},请检查jieba库是不是已经安装了")
        except ZeroDivisionError as e:
            print(f"【除零错误】:{e},总有效词数为0,无法计算占比")
        except Exception as e:
            print(f"【未知错误】:{e},请检查输入的文本是不是正确的")

整理了 3 个你写代码的时候,最容易遇到的专属报错:

jieba 分词相关报错

常见报错 1:AttributeError: module 'jieba' has no attribute 'lcut'

原因: jieba 版本太老,老版本的 jieba 里没有lcut方法,只有cut方法
解决: 升级 jieba 到最新版本,用pip install --upgrade jieba命令,或者用jieba.cut()方法,再转成列表list(jieba.cut(text))

常见报错 2:TypeError: cut() got an unexpected keyword argument 'cut_all'

原因: jieba 的cut()方法里,没有cut_all这个参数,你写错了参数名
解决: 正确的参数是cut_all,检查拼写是不是正确,或者用lcut()方法,参数是cut_all=True

文本处理相关报错

常见报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte

原因: 你读取的文本文件,不是 UTF-8 编码,是 GBK 编码,Python 用 UTF-8 解码的时候出错了
解决: 读取文件的时候,指定编码格式为 GBK,比如open("text.txt", "r", encoding="gbk"),或者先把文件转换成 UTF-8 编码

字典、列表相关报错

常见报错:TypeError: unhashable type: 'list'

原因: 你用了一个列表当字典的 key,字典的 key 必须是不可变类型(字符串、数字、元组),列表是可变类型,不能当 key
解决: 把列表转换成元组,再当 key,比如key = tuple("NLP", "AI"),或者用字符串当 key

相关推荐
谢尔登9 小时前
01_Java基础速通
java·开发语言
前端炒粉9 小时前
DOM 常用 API 速查表
开发语言·javascript·ecmascript
枫彩9 小时前
A股数据源怎么选?用 Python 验收 AI 复盘的日期与明细
python·ai agent·股票数据·mcp
2601_962382439 小时前
Python 代码不可不知的函数式编程技术
python·函数式编程·高阶函数·嵌套函数·头等函数
2601_962078039 小时前
Python办公自动化与数据分析实战 培训班2021年
python·数据分析·办公自动化·自动化办公·实战演练
用户9385156350710 小时前
Text2SQL 实战:用 DeepSeek 大模型实现自然语言查询 SQLite 数据库
python·sqlite
2601_9620996810 小时前
Python环境下中文分词实现与应用探索
python·自然语言处理·中文分词·jieba·开源社区
en.en..10 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
2601_9669496510 小时前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
用户0190275816110 小时前
如何用 Python 监控 A 股涨停跌停与封板/炸板?
python