“ yaml.parser.ParserError:预期”是什么',但找到了''' 意思?

发布于 2021-01-29 16:27:59

我有以下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>

关注者
0
被浏览
187
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您的文件不是有效的YAML。它看起来像是YAML和INI文件的混合体。

    • 您不能像[mysql]在YAML中那样定义块。如果要定义相关属性的集合,请使用带有嵌套键的列表:

      - 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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看