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

相关推荐
Tiger_shl2 小时前
C# 托管对象、非托管对象 讲解
开发语言·c#
山川而川-R2 小时前
Windows新系统_安装anaconda-2026-4.24
python
ID_180079054732 小时前
Python 实现京东商品详情 API 数据准确性校验(极简可直接用)
java·前端·python
码农的神经元2 小时前
配电网智能决策平台:从风险感知到自愈控制的 Python 实现
开发语言·python
xlq223222 小时前
46.线程池
linux·开发语言
LF男男2 小时前
Action- C# 内置的委托类型
java·开发语言·c#
记录无知岁月2 小时前
【C/C++】头文件包含问题分析
c语言·开发语言·c++
zhaoshuzhaoshu2 小时前
主流 AI 编程助手工具特点与对比
人工智能·python
Daydream.V2 小时前
Python 多线程编程从入门到精通:基础 + 实战 + 避坑全攻略
python·线程·threading·线程教学