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

问题描述 投票:0回答:7

我在 ubunty 64 上使用 python 2.7 并使用 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

当我运行以下代码时,出现以下错误。但是如果我删除树根上方的行,代码就可以工作:

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
python yaml pyyaml
7个回答
57
投票

尝试在冒号后面添加空格。


28
投票

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

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

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


9
投票

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

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

错误:

version '3.7'

services:
  rabbitmq3:
    image: rabbitmq:3-management

已修复:

version: '3.7'

services:
  rabbitmq3:
    image: rabbitmq:3-management

6
投票

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


1
投票

当某个部分缩进不正确时,我也会遇到同样的错误。就我而言,下线过度缩进。

错误:

tags:
  - name: my_tag
parameters:
  - in: path
        name: id

更正:

tags:
  - name: my_tag
parameters:
  - in: path
    name: id

遗憾的是,这也被认为是“映射值”错误。


0
投票

尝试了上述所有解决方案后,我仍然遇到同样的错误。对我有用的是直接从 vscode 创建一个

.yml
文件并将内容复制到该文件,它起作用了!!!


0
投票

我发现了一个奇怪的行为。我有一个 yml 文件,可以在本地计算机上毫无问题地读取该文件。当我将其移至服务器(Windows 2019)时,我开始收到此错误。尝试了这里建议的所有方法,但没有任何效果。所以我删除了第一行,它只是一个注释,它开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.