Python 忽略PyYAML转储的对象

Python 忽略PyYAML转储的对象,python,yaml,pyyaml,Python,Yaml,Pyyaml,我使用PyYAML dump来打印复杂的数据结构,但有一类对象不能也不想被转储 目前我得到: yaml.representer.RepresenterError: cannot represent an object 我希望yaml.dump完全忽略这个特定的类,或者只是呈现类名并像往常一样继续 如果这是可能的,我怎么做呢?您必须为对象提供一个重新输入。有多种方法可以做到这一点,有些方法涉及更改对象 当显式注册representer时,不必更改对象: import sys from ruame

我使用PyYAML dump来打印复杂的数据结构,但有一类对象不能也不想被转储

目前我得到:

yaml.representer.RepresenterError: cannot represent an object
我希望
yaml.dump
完全忽略这个特定的类,或者只是呈现类名并像往常一样继续


如果这是可能的,我怎么做呢?

您必须为对象提供一个重新输入。有多种方法可以做到这一点,有些方法涉及更改对象

当显式注册representer时,不必更改对象:

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\u representer
中,
数据
是实例化的
secret()
,因为函数不使用它,所以不会泄漏任何“机密”。您也可以返回用户名,但不能返回密码。
represente\u scalar
函数需要一个标记(这里我使用了
!secret
)和一个标量(这里是字符串
unknown

以上各项的输出:

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

我在上面使用的是
ruamel.yaml
,它是PyYAML的升级版本(免责声明:我是该软件包的作者)。以上内容也应该适用于PyYAML