2

在此处发布此内容而不是 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"解决问题。

4

1 回答 1

2

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

令牌扫描器在几个微版本之前已更改,以便允许::?以纯标量出现(根据 1.2 规范的要求,请参见示例 7.10),这些更改影响了这种“紧凑 JSON”语法。

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

from ruamel import yaml
test_str = '{"in":{},"out":{}}'
yaml.safe_load(test_str, version="1.1")
于 2017-08-14T19:48:43.373 回答