Home > Net >  Loading a YAML-file throws an error in Python
Loading a YAML-file throws an error in Python

Time:02-03

I am reading in some YAML-files like this:

data = yaml.safe_load(pathtoyamlfile)

When doing so I get the followin error:

yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:value'

When checking for the line of the YAML-file which is also given in the error messages I recognized that there is always this key-value-pair: simple: =.

Since the YAML-files are autogenerated I am not sure if I can change the files themselves. Is there a way on reading the data of the YAML-files none the less?

CodePudding user response:

It looks like you have hit this bug. There is a workaround suggested in the comments.

Given this content in example.yaml:

example: =

This code fails as you've described in your question:

import yaml

with open('example.yaml') as fd:
  data = yaml.safe_load(fd)
print(data)

But this works:

import yaml

yaml.SafeLoader.yaml_implicit_resolvers.pop('=')
with open('example.yaml') as fd:
  data = yaml.safe_load(fd)
print(data)

And outputs:

{'example': '='}

CodePudding user response:

If you cannot change the input, you might be able to upgrade the library that you use:

import sys
import ruamel.yaml

yaml_str = """\
example: =
"""
    
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
for key, value in data.items():
    print(f'{key}: {value}')

which gives:

example: =

Please be aware that ruamel.yaml still has this bug in its safe mode loading ( YAML(typ='safe') ).

  • Related