万叶集 |
---|
🎉 隐约雷鸣 🎉 阴霾天空 🎉 |
🎉 但盼风雨来 🎉 能留你在此 🎉 |
文章目录
前言:今天在使用 yaml.load(data) 的时候出现如下报错。
脚本示例如下:
# coding:utf-8
import yaml
def read(path):
with open(path, 'r') as file:
data = file.read()
result = yaml.load(data)
return result
if __name__ == '__main__':
result = read('test.yaml')
print(result)
报错如下:
Traceback (most recent call last):
File "/Users/username/PycharmProjects/XXXXX/XXXXX/file_read_write/test_yaml.py", line 14, in <module>
result = read('test.yaml')
File "/Users/username/PycharmProjects/XXXXX/XXXXX/file_read_write/test_yaml.py", line 9, in read
result = yaml.load(data)
TypeError: load() missing 1 required positional argument: 'Loader'
首先看这个❌错误类型:TypeError: 缺少1个必需的位置参数:“Loader”
这是因为在 YAML 5.1版本后,已经弃用了 yaml.load(file) 这个用法,因为这样很不安全。在5.1版本之后就修改了,使用 yaml.load() 方法需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数,这样 load() 函数也变得更加安全。解决上述报错将 yaml.load() 改为 ``yaml.load(data, Loader=yaml.FullLoader) 即可。
解决该 TypeError 不单单 只有 yaml.load(data, Loader=yaml.FullLoader)
这一个方法。
以下三选一即可解决该 TypeError
yaml.safe_load(file.read())
yaml.load(file.read(), Loader=yaml.FullLoader)
yaml.load(file.read(), Loader=yaml.CLoader)