Ответ 1
Символ канала в конце строки в YAML означает, что любой последующий текст с отступом следует интерпретировать как многострочное скалярное значение. Смотрите спецификацию YAML.
В частности, канал указывает, что (кроме отступа) скалярное значение следует интерпретировать буквально таким образом, чтобы сохранить переводы строки. И наоборот, символ >
указывает на то, что следует многострочный скалярный скаляр, означающий, что переводы строк преобразуются в пробелы. Например:
>>> import yaml
>>> yaml.load("""
... |
... This is a multi-line
... literal style scalar.
... """)
'This is a multi-line\nliteral style scalar.\n'
>>> yaml.load("""
... >
... This is a multi-line
... folded scalar; new lines are folded into
... spaces.
... """)
'This is a multi-line folded scalar; new lines are folded into spaces.\n'
Часть 6+
- это индикатор отступа (явная спецификация того, сколько пробелов должно использоваться) с "индикатором сжатия" +
который контролирует, как следует обрабатывать лишние пробелы в конце скалярного литерала.
Ошибка, которую вы получаете, хитрая: это потому, что отступ должен быть относительно текущего элемента уровня блока. Так что в этом случае это должно быть 4+
вместо 6+
потому что последний элемент уровня блока - это элемент массива (заданный -
), и литерал имеет отступ 4 от него. Несколько удивительно final: |
отображение не считается блочным элементом, даже если его значение многострочно. Это имеет смысл, если вы подумаете об этом, - это всего лишь однострочное отображение "ключ: значение". Значение просто использует специальный синтаксис для многострочных скалярных значений. Смущает, но как-то соответствует...