yaml八进制整数生成错误

时间:2016-04-09 07:48:07

标签: python-3.x yaml python-3.5

在我的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

2 个答案:

答案 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.yamlpip install ruamel.yaml)。它默认为加载1.2,如文档here

  

除非YAML文档加载了显式版本== 1.1或文档以:

开头      

%YAML 1.1

     

,ruamel.yaml会将文档加载为版本1.2。

  

YAML 1.2不再接受以0开头且仅由数字字符组成的字符串作为八进制,你需要指定0o [0-7] +的字符串(零+ +小写o表示八进制+一个或多个八进制字符)。