То, что вы делаете неправильно, использует непоследовательный отступ, что затрудняет, особенно новичку, использующему YAML, обнаружение того, что идет не так.
- Вы делаете отступ для сопоставления, которое является значением дляклавиша
vars
с четырьмя позициями. - Вы ставите в соответствие отображение, которое является значением для ключа
input
с пятью позициями. - Вы делаете отступ для сопоставления, являющегося значением для ключа
output
с двумя позициями. - Вы делаете отступ для сопоставления, являющегося значением для ключа
map
с тремя позициями.
Теперь это все разрешено, но делает ваш файл менее читаемым для людей.Но то, что не допускается, это то, что сопоставление является значением с source
, частично с тремя позициями (ключи default
, csv
и map
) и частично с four позиции (vars_map
, remove_secret
).
Обратите внимание, что для YAML существуют парсеры, которые не выдают ошибку (хотя они должны это делать), и разбирают это так, как будто vars_map
и remove_secret
имеют отступ с целым числом password
.
То, что вы получаете строку 27 в качестве указания на ошибку, состоит в том, что синтаксический анализатор не может правильно проанализировать конец, отображение, начинающееся на этой строке (т. Е. Отображение, начинающееся с пары ключ-значение default: csv
.
Программа Oxidized
может быть более удобной для пользователя, например, если вы используете мой синтаксический анализатор ruamel.yaml
(для Python), вы получите сообщение об ошибке, которое указывает на эту ошибку более точно и гораздо более полезным способом, так что это не проблема YAML,но Oxidized не является удобным для пользователя:
ruamel.yaml.parser.ParserError: while parsing a block mapping
in "<unicode string>", line 26, column 4:
default: csv
^ (line: 26)
expected <block end>, but found '<block mapping start>'
in "<unicode string>", line 35, column 5:
vars_map:
^ (line: 35)
(То, что первая строка здесь обозначена как 26, является типичным началом отсчета нуля против начала отсчета при 1 разнице).