使用Rasa训练聊天机器人遇NoneType无get属性错误求助
解决Rasa训练数据报错与h5py警告问题
咱一步步来搞定你遇到的两个问题,先解决影响训练的AttributeError,再处理看着闹心但不影响运行的h5py警告。
一、AttributeError: 'NoneType' object has no attribute 'get' 错误排查
这个错误的核心逻辑很明确:你代码里某个本该是字典/类对象的变量变成了None,之后你尝试调用它的get()方法,自然就触发报错了。结合你用Rasa开发的场景,大概率是这几个原因:
- 训练数据格式不规范:
检查你的nlu.md、stories.md等训练文件,有没有语法错误?比如intent例子是不是漏了-符号,实体标注格式是不是写错(比如应该是[实体](实体类型)却搞成了别的)。Rasa解析错误数据时,会导致加载的数据对象为None,后续调用get()直接炸锅。 - 配置文件组件配置错误:
看看config.yml里的pipeline和policy配置,有没有拼写错组件名称?比如把tensorflow_embedding写成tensorflow_embed,或者某个组件的参数缺失,导致组件初始化失败返回None。 - 自定义代码(train_init.py)逻辑问题:
你调用了apixu、Slack的API,会不会是API请求失败(比如密钥错了、网络不通)返回了None?然后你直接对这个None调用get()取字段。建议在API调用后加个判断逻辑:response = call_target_api() if response is not None: data = response.get('target_key') else: print("API请求失败,请检查密钥和网络连接")
排查小技巧:
在报错的代码行前,打印相关变量的值(比如print(出问题的变量名)),确认是不是None,顺着变量的生成路径往上找,很快就能定位根源。
二、h5py FutureWarning 警告处理
这个警告是h5py旧版本和你环境里的numpy版本不兼容导致的,在Python3.6 + Anaconda3的环境里很常见,本身不影响代码运行,但看着不舒服,解决方法有这几个:
- 调整h5py与numpy版本到兼容组合:
打开Anaconda Prompt,执行命令:
这个版本对Python3.6和numpy的兼容性很好,基本能解决警告问题。如果还不行,可以同步调整numpy版本:conda install h5py=2.10.0conda install numpy=1.19.5 - 直接忽略警告:
如果不想折腾版本,直接在train_init.py开头加几行代码过滤警告:
这样运行时就不会弹出这个警告了。import warnings warnings.filterwarnings("ignore", category=FutureWarning)
内容的提问来源于stack exchange,提问作者Antonblue16
相关产品推荐
相关产品推荐

