PyYAML ConstructError:无法确定标记的构造函数

时间:2018-07-24 16:45:30

标签: python python-2.7 yaml pyyaml

我使用Python 2.7使用PyYAML构造了几个类。但是只有下面定义的类会失败:

ConstructorError: could not determine a constructor for the tag 
    '!ClassifyTransform'
        in "<unicode string>", line 1, column 5:
        --- !ClassifyTransform
            ^

YAML字符串如下:

        self.yamlconfig =  dedent(u'''\
        --- !ClassifyTransform
        file_with_path: '/../../testdata/classify.csv'
        skip_header_lines: 1
        duplicates: []
        outtype: 'dataframe'
        client: 'test'
        classifycolumn: [ 
            { newcolumn: 'audit_status',
              conditions: [['', 'Status', '==', {scalar: 'F', column: None}], ['&', 'STATUS', '==', {scalar: 'C', column: None}]],
              value: [['', {scalar: 'Filled', column: None}]]
            },
            { newcolumn: 'audit_status',
              conditions: [['', 'Status', '%NA', {scalar: '', column: None}], ['&', 'STATUS', '==', {scalar: 'C', column: None}]],
              value: [['', {scalar: 'Filled - Order Missing', column: None}], ['+', {scalar: '', column: None}]]
            }
        ]
    ''')

对于构造函数,我使用的模式与其他所有类相同:

def transform_constructor(loader, node):
    instance = ClassifyTransform.__new__(ClassifyTransform)
    yield instance
    state = loader.construct_mapping(node, deep=True)
    instance.__init__(**state)

yaml.add_constructor(yaml_tag, transform_constructor)

我无法确定yamlconfig出了什么问题。

我在实验中发现我已经使用了此导入

import ruamel.yaml as yaml

在我的课程中,并且在测试用例中导入yaml,这并不奇怪。

1 个答案:

答案 0 :(得分:0)

pip3 instal PyYAML==3.13

需要最新版本的PyYAML。新版本支持它并稳定

对于python 2.7,也需要类似的最新升级版本。