加载config.yml遇TypeError:yaml.load()缺失Loader参数的解决求助
解决Rasa加载config.yml时的TypeError问题
问题场景
制作Rasa聊天机器人时,执行加载config.yml的代码触发TypeError,核心代码如下:
from rasa_nlu.training_data import load_data from rasa_nlu.config import RasaNLUModelConfig from rasa_nlu.model import Trainer from rasa_nlu import config # 加载训练数据 training_data = load_data("intent.md") # 加载配置并初始化训练器 trainer = Trainer(config.load("config.yml")) # 训练模型 interpreter = trainer.train(training_data) # 保存模型 model_directory = trainer.persist("./models/nlu")
触发的错误信息:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-77-03eebd55ea43> in <module> 8 9 # Use trainer to load configuration data the needs to be learnt by the model ---> 10 trainer = Trainer(config.load("config.yml")) 11 12 # Train model on training data ~\anaconda3\envs\py36\lib\site-packages\rasa_nlu\config.py in load(filename, **kwargs) 42 if filename is not None: 43 try: ---> 44 file_config = utils.read_yaml_file(filename) 45 except yaml.parser.ParserError as e: 46 raise InvalidConfigError("Failed to read configuration file " ~\anaconda3\envs\py36\lib\site-packages\rasa_nlu\utils\__init__.py in read_yaml_file(filename) 234 def read_yaml_file(filename): 235 fix_yaml_loader() ---> 236 return yaml.load(read_file(filename, "utf-8")) 237 238 TypeError: load() missing 1 required positional argument: 'Loader'
错误原因
该错误源于PyYAML版本兼容性问题:PyYAML 5.1及以上版本要求调用yaml.load()时必须显式指定Loader参数(如FullLoader),而旧版Rasa NLU的代码中未添加该参数,导致触发TypeError。
解决方案
方案1:降级PyYAML到兼容版本
执行以下命令将PyYAML降级到5.0.1版本,该版本无需强制指定Loader:
pip install pyyaml==5.0.1
方案2:修改Rasa NLU源码中的YAML加载逻辑
找到Python环境中rasa_nlu/utils/__init__.py文件,定位read_yaml_file函数,将原代码:
def read_yaml_file(filename): fix_yaml_loader() return yaml.load(read_file(filename, "utf-8"))
修改为以下两种方式之一:
- 使用安全加载器(推荐):
def read_yaml_file(filename): fix_yaml_loader() return yaml.safe_load(read_file(filename, "utf-8"))
- 显式指定Loader:
def read_yaml_file(filename): fix_yaml_loader() return yaml.load(read_file(filename, "utf-8"), Loader=yaml.FullLoader)
方案3:升级Rasa到新版本
较新的Rasa版本已修复该兼容性问题,执行以下命令升级Rasa:
pip install --upgrade rasa
内容的提问来源于stack exchange,提问作者Vibhuti Narayan Patel
相关产品推荐
相关产品推荐

