在我的YAML文件中,我有以下条目:
- type: dir
name: .ssh
chmod: 0o700
根据YAML 1.2 specification第3.2.1.3节,0o700
是指定八进制的方式(第2.4节中也有一个例子)
然而,当我处理加载的文件并执行:
import os
import yaml
filename = "in.yml"
with open(filename) as fp:
for e in yaml.load(open(filename)):
if e['type'] == 'dir':
os.mkdir(e['name'], e['chmod'])
我得到TypeError: an integer is required
。这里出了什么问题?
我正在使用Python 3.5
答案 0 :(得分:3)
您认为您的YAML库支持最新版本1.2是错误的。 YAML版本是从2009年开始的,但是你使用的是PyYaml,它仍然只支持1.1。从过去几年的非活动看起来似乎是一个死的项目,所以不要期望这很快就能解决。
您可以添加
0o123
在你的程序中添加pathlib.Path
有点octals的识别(它仍然识别1.1 octals)。
请注意,上面的仅适用于Python 3,因为PyYaml具有不同的Python 2代码。
您还应考虑使用.mkdir()
类型及其os.mkdir()
代替var User = sequelize.define('User', {
providerIds: { type : DataTypes.ARRAY(DataTypes.STRING)}
}
答案 1 :(得分:2)
安装ruamel.yaml(pip install ruamel.yaml
)。它默认为加载1.2,如文档here:
除非YAML文档加载了显式版本== 1.1或文档以:
开头%YAML 1.1
,ruamel.yaml会将文档加载为版本1.2。
和
YAML 1.2不再接受以0开头且仅由数字字符组成的字符串作为八进制,你需要指定0o [0-7] +的字符串(零+ +小写o表示八进制+一个或多个八进制字符)。