Stackoverflow上有这个问题的详细解决过程。
总结一下,出现这个问题是因为原来的yaml官方默认的FullLoad过程中的正则匹配语句(loader)有问题。
有三种解决方法:
- 在yaml文件中强制类型转换
max: !!float 1e5
- 换loader,自己加进去
loader = yaml.SafeLoader
loader.add_implicit_resolver(
u'tag:yaml.org,2002:float',
re.compile(u'''^(?:
[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+]?[0-9]+)?
|[-+]?(?:[0-9][0-9_]*)(?:[eE][-+]?[0-9]+)
|\\.[0-9_]+(?:[eE][-+][0-9]+)?
|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*
|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$''', re.X),
list(u'-+0123456789.'))
with open(path, 'r') as f:
config = yaml.load(f,Loader=loader)
- yaml换包
这个包ruamel.yaml,修正了这个问题