'yaml.parser.ParserError:预期为'< document start>'是什么,但是发现'< block映射开始>''是什么意思? [英] What does 'yaml.parser.ParserError: expected '<document start>', but found '<block mapping start>'' mean?
问题描述
我有以下YAML文件:
I have the following YAML file:
[mysqld]
user: "mysql"
pid-file: /var/run/mysqld/mysqld.pid
skip-external-locking
old_passwords: 1
skip-bdb
skip-innodb
create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
women:
- Mary Smith
- Susan Williams
和以下Python代码:
and the following Python code:
#!/usr/bin/env python
import yaml
with open("config.yml") as f:
sample_config = f.read()
print(yaml.load(sample_config))
但是它给了我
Traceback (most recent call last):
File "/home/moose/Desktop/bla.py", line 9, in <module>
print(yaml.load(sample_config))
File "/usr/local/lib/python2.7/dist-packages/yaml/__init__.py", line 71, in load
return loader.get_single_data()
File "/usr/local/lib/python2.7/dist-packages/yaml/constructor.py", line 37, in get_single_data
node = self.get_single_node()
File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 39, in get_single_node
if not self.check_event(StreamEndEvent):
File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 98, in check_event
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/home/moose/Desktop/bla.py"]
[dir: /home/moose/Desktop]
[path: /usr/local/texlive/2013/bin/x86_64-linux:/home/moose/google-cloud-sdk/bin:/home/moose/Downloads/google_appengine:/usr/local/texlive/2013/bin/x86_64-linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games] self.current_event = self.state()
File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 174, in parse_document_start
self.peek_token().start_mark)
yaml.parser.ParserError: expected '<document start>', but found '<block mapping start>'
in "<string>", line 2, column 1:
user: "mysql"
我不知道是什么
expected '<document start>', but found '<block mapping start>'
以及如何修理它。什么是< document start>
,什么是<块映射开始>
?
means and how to fix it. What is <document start>
and what is a <block mapping start>
?
推荐答案
您的文件不是有效的YAML。它看起来像是YAML和 INI文件的混合体。
Your file isn't valid YAML. It looks like a mix of YAML and INI file.
-
您无法在YAML中定义诸如
[mysql]
之类的块。如果要定义相关属性的集合,请使用带有嵌套键的列表:
You can't define blocks like
[mysql]
in YAML. If you want to define a collection of related properties, use a list with nested keys:
- service:
name: mysql
type: database
port: 3306
- service:
name: ssh
type: remote access
port: 22
您不能像 skip-external-locking $ c这样简单的单词$ c>。每个属性都需要一个值。请使用
skip-external-locking:true
。
You can't have bare words like skip-external-locking
. Each property requires a value. Use skip-external-locking: true
instead.
这是文档版本,其语法错误已修复。我使用 YAMLLint (一种用于验证YAML的便捷工具)进行了检查。
Here's a version of your document with the syntax errors fixed. I checked this over with YAMLLint, a handy tool for validating YAML.
name: mysqld
user: mysql
pid-file: /var/run/mysqld/mysqld.pid
skip-external-locking: true
old_passwords: 1
skip-bdb: true
skip-innodb: true
create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
women:
- Mary Smith
- Susan Williams
这篇关于'yaml.parser.ParserError:预期为'< document start>'是什么,但是发现'< block映射开始>''是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!