一、报错分析
直接使用 yaml.load(stream) 报错如下:
File "D:\workplaces\python\GraphSAINT-master\graphsaint\utils.py", line 112, in parse_n_prepare
train_config = yaml.load(f_train_config)
TypeError: load() missing 1 required positional argument: 'Loader'
显然,编译器提示 yaml 的 load()函数 缺少 1 个必要参数:'Loader',这是因为 Yaml 5.1 版本后弃用了 yaml.load(file) 这个用法。
新版本 Yaml 的 load() 函数如下:
def load(stream, Loader):
"""
Parse the first YAML document in a stream
and produce the corresponding Python object.
"""
loader = Loader(stream)
try:
return loader.get_single_data()
finally:
loader.dispose()
Yaml 5.1 之后的版本为了加强安全性要求指定具体的 Loader,禁止执行任意函数。
二、解决方案
新版本修改为以下任意一种即可,即指定了 'Loader'
d1 = yaml.load(file, Loader=yaml.FullLoader)
d1 = yaml.safe_load(file)
d1 = yaml.load(file, Loader=yaml.CLoader)
with open(config_file) as stream:
config_dict = yaml.safe_load(stream)