如何在PyYAML中阻止八进制/十六进制/二进制隐式转换为Int?

问题描述

在YAML文件中,我希望用户仅输入十进制整数值。

YAML文件中还有其他对象。但是,将指定不带引号的整数值。因此,我只关心整数输入。

示例YAML文件

SendUserEmails

我正在使用yamlordereddictloader在python脚本中读取此YAML文件

DecimalsList:
- 34
- 0432   # PyYAML converts 0432 to 287 by interpreting this as octal.

这将破坏我的应用程序逻辑,因为它与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)