Python 3.x 在yaml文件中使用docstring定义:解析错误

Python 3.x 在yaml文件中使用docstring定义:解析错误,python-3.x,yaml,pyyaml,Python 3.x,Yaml,Pyyaml,我正在尝试分析以下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) --------------------------------------

我正在尝试分析以下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
在[2]中:以open('new.yaml')作为f:
…:dataMap=yaml.安全荷载(f)
---------------------------------------------------------------------------
ParserError回溯(上次最近的调用)
在()
1.
2以open('new.yaml')作为f:
---->3数据映射=yaml.安全荷载(f)
/phaedrus/home/skorada/lib/python3.5/site-
parse_block_sequence_条目中的packages/yaml/parser.py(self)
391令牌=self.peek_令牌()
392 raise ParserError(“在分析块集合时”,
自我标记[-1],
-->393“应为,但找到%r”%token.id,
标记。开始(标记)
394 token=self.get_token()
395事件=SequenceEndEvent(标记.开始标记,标记.结束标记)
ParserError:在分析块集合时
在“new.yaml”中,第1行第1列
应为,但找到“?”
在“new.yaml”中,第2行第1列

真的不确定问题出在哪里?

YAML中没有三重引号。标量可以是单引号、双引号、非引号或(块样式)文字或折叠

如果要模拟Python的三重引号字符串,并且没有任何需要转义的控制字符(不包括换行符),则可以使用块样式的文字标量:

api:

  api_first: |
     this is some docstring 
     with newlines after each line
。如果有控制字符,则必须在YAML中使用双引号标量,并将换行符设置为
\n
,或在双引号中设置为双换行符

您的
“这是某个docstring”
被解释为一行上的三个标量(
“这是某个docstring”
),这是无效的YAML


我想你的YAML中开头的
\
是一个打字错误。

嗨,安东,谢谢你的回复。我想我是在尝试多行。这可以通过使用“|”来解决,它对我很有效。这就是我在回答中指出的
块样式文字标量。我应该举个例子。