web-dev-qa-db-ja.com

'yaml.parser.ParserError:期待される' <document start> 'ですが、見つかった' <block Mapping start> ''はどういう意味ですか?

次のYAMLファイルがあります。

[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コード:

#!/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>とは何ですか?<block mapping start>とは何ですか?

7
Martin Thoma

ファイルが有効なYAMLではありません。 YAMLと INIファイル が混在しているように見えます。

  • YAMLで[mysql]のようなブロックを定義することはできません。関連するプロパティのコレクションを定義する場合は、ネストされたキーを持つリストを使用します。

    - service:
        name: mysql
        type: database
        port: 3306
    - service:
        name: ssh
        type: remote access
        port: 22
    
  • skip-external-lockingのような裸の言葉を持つことはできません。各プロパティには値が必要です。代わりにskip-external-locking: trueを使用してください。

これは、構文エラーが修正されたドキュメントのバージョンです。これを YAMLLint 、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
10
Alex P