Python新手开发ChatterBot遇两类错误,寻求解决方案
解决ChatterBot在高版本Python中的兼容性错误及代码修正
核心问题:版本兼容性
ChatterBot的最新稳定版本(1.0.4)停更于2019年,和Python 3.8+存在API适配问题,这是你遇到time.clock和collections.Hashable报错的根本原因。
具体错误修复方案
1. 快速解决:降级Python版本
直接切换到Python 3.7版本,该版本完全兼容旧版ChatterBot,无需修改任何源码或代码,适合新手快速入门。
2. 适配高版本Python(不降级)
如果坚持用Python 3.8+,需要手动修改ChatterBot的源码:
- 修复
time.clock报错:找到ChatterBot安装目录下的chatterbot/utils.py文件,将所有time.clock()调用替换为time.perf_counter()或time.time()。 - 修复
collections.Hashable报错:搜索ChatterBot所有源码文件,把from collections import Hashable改为from collections.abc import Hashable;如果是直接使用collections.Hashable的代码,替换为collections.abc.Hashable。
代码中的语法错误修正
你的代码存在语法和逻辑冗余问题,修正后如下:
import time from chatterbot import ChatBot from chatterbot.trainers import ChatterBotCorpusTrainer # 临时适配Python 3.8+的time.clock问题 time.clock = time.time # 只创建一次完整配置的ChatBot实例,避免重复初始化 bot = ChatBot( 'Bob', storage_adapter='chatterbot.storage.SQLStorageAdapter', database_uri='sqlite:///database.sqlite3', logic_adapters=[ 'chatterbot.logic.BestMatch', 'chatterbot.logic.MathematicalEvaluation', 'chatterbot.logic.TimeLogicAdapter' ] ) # 训练英文语料库,修复原代码的单引号缺失错误 trainer = ChatterBotCorpusTrainer(bot) trainer.train('chatterbot.corpus.english') # 测试初始响应 response = bot.get_response('Greetings.') print("Bot Response:", response) name = input("Enter Your Name: ") print("Welcome to the Bot Service! Let me know how can I help you?") while True: request = input(f"{name}: ") # 统一转为小写判断,简化逻辑 if request.lower() == 'bye': print('Bot: Bye') break else: response = bot.get_response(request) print('Bot:', response)
自定义语料库使用说明
创建自定义语料库时,遵循ChatterBot的YAML格式即可,例如创建custom_corpus.yml:
categories: - custom_greetings conversations: - - 你好 - 嗨,很高兴认识你! - - 你叫什么名字? - 我是Bob,你的专属聊天机器人~
训练时指定文件路径:
trainer.train('./custom_corpus.yml')
只要完成了前面的版本兼容修复,自定义语料库不会再出现之前的Hashable错误。
内容的提问来源于stack exchange,提问作者C-IDC
相关产品推荐
相关产品推荐

