ruamel.yaml 的最新版本无法解析简单流映射

Latest version of ruamel.yaml fails to parse simple flow mapping

在这里发布这个而不是 Bitbucket 因为我真的不确定这是否是用户错误。升级到最新版本后像这样简单的东西坏了:

>>> from ruamel import yaml
>>> test_str = '{"in":{},"out":{}}'
>>> yaml.safe_load(test_str)

ruamel.yaml.parser.ParserError: while parsing a flow mapping
  in "<byte string>", line 1, column 1:
    {"in":{},"out":{}}
    ^ (line: 1)
expected ',' or '}', but got '<scalar>'
  in "<byte string>", line 1, column 6:
    {"in":{},"out":{}}
         ^ (line: 1)

"in""out" 之后添加空格可以解决问题。

这是 ruamel.yaml<0.15.30 中的错误。

令牌扫描器在早期的几个微版本中进行了更改,以允许 ::? 出现在普通标量中(根据 1.2 规范的要求,请参见示例 7.10),这些更改影响了这个,"compact JSON",语法。

一种解决方法,如果您无法升级 ruamel.yaml,这可能比更改所有 YAML 输入更容易,将其显式加载为 YAML 1.1:

from ruamel import yaml
test_str = '{"in":{},"out":{}}'
yaml.safe_load(test_str, version="1.1")