Одиночные символы y и Y выводятся как логические значения YAML 1.1 - PullRequest
1 голос
/ 16 апреля 2020

Когда я делаю:

from ruamel import yaml

seq = ["x", "y", "z", "Y", "true", True]
print(yaml.dump(seq, version=(1,1)))

, это дает:

%YAML 1.1
--- [x, y, z, Y, 'true', true]

, но я ожидал, что y и Y будут заключены в кавычки, потому что они загружаются обратно как логические значения потому что это YAML 1.1. Более того, эта ошибка указывает на то, что эта проблема решена.

Почему эта ошибка помечена как закрытая, если она все еще показывает эту ошибку даже в версии ruamel.yaml> = 0.15.93?

1 Ответ

1 голос
/ 16 апреля 2020

Вы используете небезопасную функцию совместимости PyYAML dump() (и, кроме того, неэффективно). Эта функция устарела, но имитирует ошибочное поведение PyYAML.

Вместо этого следует создать экземпляр YAML() и использовать его метод .dump().

import sys
import yaml as pyyaml
import ruamel.yaml

seq = ["x", "y", "z", "Y", "true", True]
print("PyYAML version:", pyyaml.__version__)
pyyaml.dump(seq, sys.stdout, default_flow_style=None, explicit_start=True, version=(1,1))
print()

yaml = ruamel.yaml.YAML(typ='safe')
yaml.version = (1,1)
yaml.default_flow_style=None
print("ruamel.yaml version:", ruamel.yaml.__version__)
yaml.dump(seq, sys.stdout)

, что дает:

PyYAML version: 5.3.1
%YAML 1.1
--- [x, y, z, Y, 'true', true]

ruamel.yaml version: 0.16.10
%YAML 1.1
--- [x, 'y', z, 'Y', 'true', true]
...