Earlier this week, Haroen Viaene posted this tweet about YAML:
worst part of yaml: https://yaml.org/type/bool.html
— Haroen Viaene (@haroenv) January 10, 2022
The linked-to page contains the documentation on what defines a boolean in YAML, and details that it can be parsed using this regex:
y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF
~
The reason to why this is problematic in some cases, is “The Norway Problem” YAML has: when you abbreviate Norway to its ISO 3166-1 ALPHA-2 form NO
, YAML will return false
when parsing it:
countries:
- GB
- IE
- FR
- DE
- NO
>>> from pyyaml import load
>>> load(the_configuration)
{'countries': ['GB', 'IE', 'FR', 'DE', False]}
👉 The solution is to either escape these values in double quotes, or to use a library — such as StrictYAML for Python — that won’t convert NO
to False
.
~
Other problematic values in YAML are version numbers that end in .0
and a lastname such as Null
. By default these get converted to numbers or NULL
respectively.
ISO 3116 is about magnesium and magnesium alloys; I think you mean ISO 3166.
Hahaha, great catch! 🙈