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

Python运行Chatterbot报AttributeError: collections无Hashable属性

报错原因

该报错与业务代码编写无关,属于依赖版本兼容问题:

  • Python 3.10及以上版本正式移除了collections模块下的Hashable等抽象基类,相关类全部迁移到collections.abc子模块中
  • ChatterBot库已长期停止维护,其依赖的低版本PyYAML未做高版本Python适配,仍然调用collections.Hashable,最终触发属性不存在的错误。
    升级依赖、更新Python版本无法解决问题的核心原因是ChatterBot本身没有发布适配Python3.10+的新版本。
修复方案

三种方案任选其一即可:

方案1:降级Python版本

卸载当前Python 3.10,安装3.7~3.9区间的Python版本。这类版本仍保留collections模块下的抽象基类别名,安装ChatterBot后可直接运行现有代码,无需额外修改。

方案2:修改依赖库源码

打开报错栈中提示的PyYAML源码文件,路径为C:\Users\robin\AppData\Local\Programs\Python\Python310\lib\site-packages\yaml\constructor.py,做两处修改:

  1. 在文件头部导入区域新增一行:
from collections.abc import Hashable
  1. 定位到报错行if not isinstance(key, collections.Hashable):,替换为:
if not isinstance(key, Hashable):

保存文件后重新运行代码即可。注意如果后续重装PyYAML,该修改会被覆盖,需要重复操作。

方案3:代码开头加兼容补丁

无需修改依赖、无需更换Python版本,在你的chatbot.py文件最顶部、所有导入语句之前,加入以下补丁代码:

import collections
import collections.abc
# 兼容高版本Python移除的collections抽象基类
collections.Hashable = collections.abc.Hashable
collections.Iterable = collections.abc.Iterable
collections.Mapping = collections.abc.Mapping
collections.MutableMapping = collections.abc.MutableMapping

补丁会提前将高版本Python中移除的属性映射回collections模块,后续原有代码可直接正常运行,对项目侵入性最低,也能覆盖后续可能触发的其他同类兼容报错。

内容的提问来源于stack exchange,提问作者Jakob Long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:00:53