Python和PYAML - yaml.scanner.ScannerError:不允许在此处映射值
我在64位的Ubuntu系统上,使用的是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
当我运行下面的代码时,出现了一个错误。不过如果我把树根(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
7 个回答
9
如果有人来到这里,格式和空格都没问题,但错误还是存在。
检查一下版本后面有没有冒号!(我自己都觉得傻)
错误信息:
version '3.7'
services:
rabbitmq3:
image: rabbitmq:3-management
修复方法:
version: '3.7'
services:
rabbitmq3:
image: rabbitmq:3-management
30
如果你来到这里,发现即使在冒号后面加了空格,还是会出现这个错误
你也可能会因为从某些格式化的来源复制了yaml文本而遇到这个错误(对我来说,是从Slack消息中复制的)。这样做会悄悄地替换成一些标准的YAML读取器无法识别的非ASCII字符,但它们看起来是一样的。
解决办法是只从原始的、ASCII格式的来源复制。
60
试着在冒号后面加个空格。