2017-09-06 2 views
0

は、私は次のYAMLファイルを解析しようとしています:YAMLファイル内のドキュメンテーション文字列を定義:解析エラー

\- api: 

    api_first: """this is some docstring """ 

が、私は基本的にはトリプル引用符を使用し、その中のいくつかのステートメントを持っていると思います。 しかし、私はYAMLライブラリを使用する場合、それは私のためにいくつかのエラーがスローされます

In [1]: import yaml 

In [2]:with open('new.yaml') as f: 
...:  dataMap = yaml.safe_load(f) 
--------------------------------------------------------------------------- 
ParserError        Traceback (most recent call last) 
<ipython-input-2-2266b3e8606a> in <module>() 
    1 
    2 with open('new.yaml') as f: 
    ----> 3  dataMap = yaml.safe_load(f) 
/phaedrus/home/skorada/lib/python3.5/site- 
packages/yaml/parser.py in parse_block_sequence_entry(self) 
391    token = self.peek_token() 
392    raise ParserError("while parsing a block collection", 
self.marks[-1], 
--> 393      "expected <block end>, but found %r" % token.id, 
token.start_mark) 
394   token = self.get_token() 
395   event = SequenceEndEvent(token.start_mark, token.end_mark) 

ParserError: while parsing a block collection 
in "new.yaml", line 1, column 1 
expected <block end>, but found '?' 
in "new.yaml", line 2, column 1 

問題が何であるか本当にわかりませんか?

答えて

1

YAMLには三重引用符はありません。スカラーは、シングルクォート、ダブルクォート、ノークォート、または(ブロックスタイルの)リテラルまたはフォールディングにすることができます。

あなたはPythonのトリプル引用符で囲まれた文字列をエミュレートしたいとあなたはブロックスタイルリテラルスカラー使用することができます(改行文字が含まれていないもの)はエスケープする必要が任意の制御文字を持っていない場合:

api: 

    api_first: | 
    this is some docstring 
    with newlines after each line 

を。制御文字がある場合は、YAMLで二重引用符スカラーを使用し、改行を\nまたは二重引用符内の二重改行として持たなければなりません。

あなた"""this is some docstring """は3つの1行にスカラー("""this is some docstring "、および"")として解釈されます、それは有効なYAMLではありません。

あなたのYAMLの開始\はタイプミスです。

+0

こんにちはAnthon、返信ありがとうございます。私は、私は複数のラインを試していたと思う。これは、 "|"それは私のために働いた。 – skorada

+0

これは私の答えに示した 'ブロックスタイルリテラルスカラー'です。私は例を含めるべきだった。 – Anthon