2017-03-17 52 views
1

我使用PyYAML轉儲來打印複雜的數據結構,但有一類對象不能,也不想被轉儲。忽略PyYAML轉儲的對象

目前我得到:

yaml.representer.RepresenterError: cannot represent an object 

我想yaml.dump完全忽略這個特定的類或只呈現類名,並繼續像往常一樣。

如果這是可能的,我該怎麼做?

回答

0

您必須提供該對象的代表。有多種方法可以做到這一點,有些涉及改變對象。

當你明確地註冊申述,對象也沒有改變:

import sys 
from ruamel import yaml 


class Secret(): 
    def __init__(self, user, password): 
     self.user = user 
     self.password = password 


def secret_representer(dumper, data): 
     return dumper.represent_scalar(u'!secret', u'unknown') 

yaml.add_representer(Secret, secret_representer) 

data = dict(a=1, b=2, c=[42, Secret(user='cary', password='knoop')]) 

yaml.dump(data, sys.stdout) 

secret_representer,該data被實例化Secret(),因爲功能不使用,也沒有「祕密「被泄露。你也可以例如返回用戶名,但不是密碼。 represent_scalar函數需要一個標記(這裏我使用!secret)和一個標量(這裏是字符串unknown)。

上述的輸出:

a: 1 
b: 2 
c: [42, !secret '[unknown]'] 

我在上述其中使用ruamel.yaml被PyYAML的升級版(聲明:我是包的作者)。上面也應該與PyYAML一起工作。