2016-04-11 13 views
0

Ich arbeite mit YAML-Dateien und ich bin fest in der Verwendung der "|" für wörtliche Zitate.PyYAML wirft einen unlösbaren Fehler

Ich verwende PyYAML.

Hauptproblem hier ist, dass es für die erste Ebene "Wörterbuch" Schlüssel in der unteren Code funktioniert, aber für die zweite Ebene "Notizen" -Taste hat es nicht funktioniert.

Ich habe versucht mit ">" "| +" "| -" aber nichts hat funktioniert.

Description: | 

    This is a sample text showing that it works fine here. 

Signatures: 
    - { 
      returnValue:  'placeholder', 
      notes: | 

       Its not working here 
    } 
    - { 
      returnValue:  'another placeholder', 
      notes: ' 
        This is working here 

        ' 
     } 

überprüfte ich die Syntax auf http://yaml-online-parser.appspot.com/, https://nodeca.github.io/js-yaml/ und andere als gut, ich habe den Fehler, dass

ERROR: beim Scannen für das nächste Token gefunden Zeichen '|' das kann kein Token in "", Zeile 8, Spalte 24: Hinweise: |

Ich ging durch den Thread In YAML, how do I break a string over multiple lines? und einige andere, aber nichts hat funktioniert.

Antwort

1

Zuerst immer das minimal Beispiel machen, die den Fehler wirft:

{  notes: | 

       Its not working here 
} 

Wenn Sie die YAML specification betrachten und nach der Zeichenfolge „wörtlicher Stil“ Ihr erster Treffer ist in der Tabelle der Cotents suchen, Abschnitt 8.1 0,2, das ist Teil der Beschreibung von Block-Arten

der Code legt Fluss Stil für die Abbildung mit dem Einsatz von { }, innerhalb, dass Sie nicht Block Stil wörtliche Skalare haben kann.

Sie sollten nur die ganze YAML konsequent Stil blockieren machen (entfernen Sie die {} und die , zwischen Mapping-Elemente):

Description: | 

    This is a sample text showing that it works fine here. 

Signatures: 
    - returnValue: placeholder 
     notes: | 

      Its not working here 
    - returnValue: another placeholder 
     notes: ' 
       This is working here 

       ' 

BTW, weil standardmäßig auf wörtliche Skalare scharrt clipping ist, macht es nichts ändern wenn Sie zusätzliche leere Zeilen am Ende solcher Skalare hinzufügen.

(PyYAML unterstützt nur YAML 1.1, aber hat sich die Spezifikation nicht geändert).