Python和PYAML - yaml.scanner.ScannerError:此处不允许使用映射值

14 python yaml pyyaml

我在使用python 2.7的ubunty 64并使用PyYAML-3.10

下面是我的yaml文件:

host:localhost
username:root
password:test
database:test
operations_database:operations
treeroot:
    branch1:
        name: Node 1
        branch1-1:
            name: Node 1-1
    branch2:
        name: Node 2
        branch2-1:
            name: Node 2-1
Run Code Online (Sandbox Code Playgroud)

当我运行以下代码时,我得到以下错误.但是,如果我删除treeroot上方的行,则代码可以正常工作:

from yaml import load, dump
try:
    from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
    from yaml import Loader, Dumper
f=open('amazon.yaml')  
data = load(f, Loader=Loader) 

Traceback (most recent call last):
  File "/home/ubuntu/workspace/Amazon-Products-Crawler-1/config_files/test_yaml.py", line 10, in <module>
    data = load(f, Loader=Loader) 
  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 36, in get_single_node
    document = self.compose_document()
  File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 58, in compose_document
    self.get_event()
  File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 118, in get_event
    self.current_event = self.state()
  File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 193, in parse_document_end
    token = self.peek_token()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 128, in peek_token
    self.fetch_more_tokens()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 220, in fetch_more_tokens
    return self.fetch_value()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 580, in fetch_value
    self.get_mark())
yaml.scanner.ScannerError: mapping values are not allowed here
  in "amazon.yaml", line 6, column 9
Run Code Online (Sandbox Code Playgroud)

kwa*_*ord 37

尝试在冒号后放置空格.

  • 一种改进答案的简单方法是显示格式正确的YAML文件. (13认同)
  • 我不认为这只是科隆的问题。我在追捕结肠时遇到了这个问题... /sf/ask/3564009571/ (4认同)
  • 当行中的缩进错误时,也可能会出现该错误。这就是我的情况。 (3认同)

Pet*_*ter 16

对于任何来到这里并发现即使冒号后有空格的人,他们仍然会收到此错误

如果您从某个格式化的源中复制 yaml 文本(对我来说这是一条 Slack 消息),您也可能会收到此错误。这将无形地交换标准 YAML 阅读器无法读取但看起来相同的非 ASCII 字符。

解决方案是仅从原始的非 ASCII 源复制。

  • 我真的很讨厌 YAML :) (3认同)
  • 这对我有用,因为我直接从网站复制。一旦我删除了该文件并自己编写了整个 yaml 文件,它就起作用了。如此错综复杂。谢谢 (2认同)

Vic*_*ins 9

如果有人来到这里并且格式和空格正确,但错误仍然存​​在。

检查版本后面是否有冒号!(我捂脸呃)

错误:

version '3.7'

services:
  rabbitmq3:
    image: rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)

固定的:

version: '3.7'

services:
  rabbitmq3:
    image: rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)


小智 5

yaml文件不接受文件内容中冒号后的值。在空格后输入值,保存文件并再次运行,错误将消失。在使用BDD进行自动化的过程中,我遇到了类似的错误,经过大量调试后,此问题已得到解决。

  • 我不认为这只是科隆的问题。我在追捕结肠时遇到了这个问题... /sf/ask/3564009571/ (2认同)