首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyYAML:官方示例失败

PyYAML:官方示例失败
EN

Stack Overflow用户
提问于 2019-06-26 06:05:05
回答 1查看 76关注 0票数 0

我正在尝试在PyYAML文档中运行一个官方示例。但是,它失败了,出现了以下错误:

代码语言:javascript
复制
yaml.scanner.ScannerError: mapping values are not allowed here
  in "<unicode string>",

下面是我的密码。m运行成功,n引发错误。mn的区别在于没有"---“。

代码语言:javascript
复制
import yaml

class Monster(yaml.YAMLObject):
    yaml_tag = '!Monster'
    def __init__(self, name, hp, ac, attacks):
        self.name = name
        self.hp = hp
        self.ac = ac
        self.attacks = attacks
    def __repr__(self):
        return "%s(name=%r, hp=%r, ac=%r, attacks=%r)" % (
            self.__class__.__name__, self.name, self.hp, self.ac,      
            self.attacks)

if __name__ == '__main__':
    m = yaml.load("""
    !Monster
    name: Cave spider
    hp: [2,6]    # 2d6
    ac: 16
    attacks: [BITE, HURT]
    """)
    print(m)


    n = yaml.load("""
    --- !Monster
    name: Cave spider
    hp: [2,6]    # 2d6
    ac: 16
    attacks: [BITE, HURT]
    """)
    print(n)
  1. 为什么?
  2. 如果我想从string加载到init几个实例,请给我看看代码好吗?
EN

回答 1

Stack Overflow用户

发布于 2019-06-26 13:01:06

在"n“版本中,您正在尝试加载一个YAML文件,该文件以多行非引用标量开头。

--- !Monster name,不允许这样的标量作为映射键。如果要这样做,需要用双引号或单引号引用标量(我添加了YAML注释以使缩进更加清楚):

代码语言:javascript
复制
# n-example    
    "--- !Monster
    name": Cave spider
    hp: [2,6]    # 2d6
    ac: 16
    attacks: [BITE, HURT]

或者将非引用的映射键放在一行上。

代码语言:javascript
复制
# n-example    
    --- !Monster name: Cave spider
    hp: [2,6]    # 2d6
    ac: 16
    attacks: [BITE, HURT]

在文档中的示例中,---没有缩进,然后是一个文档开始标记,这也将! grom (一个普通的中标量感叹号)的含义更改为标记的开头。解决这个问题并保持代码良好缩进和可读性的最佳方法是使用dedent

代码语言:javascript
复制
from textwrap import dedent:

if __name__ == '__main__':
    n = yaml.load(dedent("""\
    --- !Monster
    name: Cave spider
    hp: [2,6]    # 2d6
    ac: 16
    attacks: [BITE, HURT]
    """))
print(n)

在更新的YAML 1.2规范(发布于2009年,不受PyYAML支持)中,---被重命名为指令结束标记,功能细微不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56766194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档