I use the YAML parser from http://pyyaml.org , and I want it to always interpret certain fields as a string, but I cannot understand how add_path_resolver () works.
For example: The parser assumes that the "version" is a float:
network: - name: apple - name: orange version: 2.3 site: banana
Some files have "version: 2" (which is interpreted as int) or "version: 2.3 alpha" (which is interpreted as str).
I want them to always be interpreted as str.
It seems that yaml.add_path_resolver () should let me indicate: "When you see a version: always interpret it as str), but it is not documented very well. My best guess:
yaml.add_path_resolver(u'!root', ['version'], kind=str)
But that does not work.
Suggestions on how to make my version field always be a string?
PS Here are some examples of the various "version" lines and their interpretation:
(Pdb) import yaml (Pdb) import pprint (Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2\nsite: banana")) {'network': [{'name': 'apple'}, {'name': 'orange'}], 'site': 'banana', 'version': 2} (Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2.3\nsite: banana")) {'network': [{'name': 'apple'}, {'name': 'orange'}], 'site': 'banana', 'version': 2.2999999999999998} (Pdb) pprint.pprint(yaml.load("---\nnetwork:\n- name: apple\n- name: orange\nversion: 2.3 alpha\nsite: banana")) {'network': [{'name': 'apple'}, {'name': 'orange'}], 'site': 'banana', 'version': '2.3 alpha'}
source share