2017-09-06 85 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 """被解釋爲在同一行("""this is some docstring """)三個標量和無效YAML。

我假設您的YAML中的起始\是一個錯字。

+0

嗨Anthon,謝謝你的回覆。我想我正在嘗試多線。這可以通過使用「|」來解決它爲我工作。 – skorada

+0

這是我在答案中指出的「塊樣式字面標量」。我應該包括一個例子。 – Anthon