漂亮打印可以读取但包含注释的Python表达式

时间:2014-01-15 19:50:53

标签: python comments pretty-print

我有一个数据结构,我想以人类和机器可读的形式打印出来。具体来说,我想打印它作为对构造函数的调用,如果将其解析为Python表达式,它将重建相同的对象。

数据结构可能不一致。 (除非程序有问题,否则它不会在这种不一致的状态下使用。)如果它不一致,我想把它打印出来作为一个建立一致对象的调用(我有一个明确定义的策略来解决不一致性)。但是,我在调试中使用了漂亮的打印,所以我想有一些方法来揭示不一致性。因此,对于不一致的对象,Python应该看到一个表达式来构造一致的对象,但人类应该看到不一致。

这是一个愚蠢的例子。 Sum班级的sum字段应为ab的总和。如果不是,则假定sum错误 - 但我希望在打印输出中看到错误的sum值。

class Sum:
    def __init__(self, a, b):
        self.a = a
        self.b = b
        self.update()
    def update(self):
        self.sum = self.a + self.b
    def __str__(self):
        return 'Sum(%s, %s)%s' % \
               (str(self.a), str(self.b),
                '' if self.sum == self.a + self.b else ' # sum=' + str(self.sum))

演示:

>>> x = Sum(1, 2)
>>> str(x)
'Sum(1, 2)'
>>> x.a = 2
>>> str(x)
'Sum(2, 2) # sum=3'

这不好,因为Sum(2, 2) # sum=3无法解析为更大表达式的一部分。我也不想依赖换行符,因为打印输出可以作为带有换行的文本复制。

我可以在构造函数中添加一个可选参数来构建一个不一致的对象,但它会很混乱。永远不应该在不一致的状态下创建对象。

我怎样才能打印出Python将解析但忽略的内容?

0 个答案:

没有答案