在 YAML 文件中,我希望用户仅输入十进制整数值。
YAML 文件中还有其他对象。但是,指定整数值时不带引号。所以,我只关心整数输入。
示例 YAML 文件:
DecimalsList:
- 34
- 0432 # PyYAML converts 0432 to 287 by interpreting this as octal.
我正在使用 yamlordereddictloader 在 python 脚本中读取此 YAML 文件
with open(yaml_file_path, 'r') as stream:
yaml_object = yaml.load(stream,
Loader=yamlordereddictloader.Loader)
这会破坏我的应用程序逻辑,因为它与 YAML 文件中输入的值不匹配。
如果在此列表中输入小数以外的任何内容,我想抛出错误。
我怎样才能实现这个目标?
有没有办法通过 PyYAML 停止这种整数的隐式转换?
可能有更好的方法来做到这一点,但一种方法是预处理 yaml 文件并使用正则表达式删除任何前导零:
import re
with open(yaml_file_path, 'r') as stream:
stream = re.sub(r'\b0(\d+)\b', r'\1', stream.read())
yaml_object = yaml.load(stream,
Loader=yamlordereddictloader.Loader)