Das Pipe-Symbol am Ende einer Zeile in YAML bedeutet, dass der folgende eingerückte Text als mehrzeiliger Skalarwert interpretiert werden sollte. Siehe die YAML-Spezifikation .
Insbesondere gibt die Pipe an, dass (mit Ausnahme der Einrückung) der Skalarwert wörtlich so interpretiert werden sollte, dass Zeilenumbrüche erhalten bleiben. Umgekehrt gibt das >Zeichen an, dass ein mehrzeiliger "gefalteter" Skalar folgt, was bedeutet, dass Zeilenumbrüche in Leerzeichen umgewandelt werden. Beispielsweise:
>>> 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'
Das 6+ Teil ist der Einrückungsindikator (eine explizite Angabe, wie viele Einrückungsräume verwendet werden sollen) mit dem "Chomping-Indikator", +der steuert, wie zusätzliche Leerzeichen am Ende des Skalarliteral behandelt werden sollen.
Der Fehler, den Sie erhalten, ist schwierig: Der Einzug sollte relativ zum aktuellen Element auf Blockebene sein. In diesem Fall sollte dies 4+nicht der Fall sein, 6+da das letzte Element auf Blockebene das Array-Element (angegeben durch -) ist und das Literal 4 davon eingerückt ist. Es ist etwas überraschend, dass das final: |Mapping nicht als Blockelement betrachtet wird, obwohl sein Wert mehrzeilig ist. Es macht irgendwie Sinn, wenn Sie darüber nachdenken - es ist immer noch nur eine einzeilige Zuordnung von "Schlüssel: Wert". Der Wert verwendet zufällig eine spezielle Syntax für mehrzeilige Skalarwerte. Verwirrend, aber irgendwie konsequent ...