这里我要找的是PHP的print_r函数。

这样我就可以通过查看有问题的对象的状态来调试脚本。


当前回答

这个项目修改pprint以显示所有对象字段值,它忽略对象__repr__成员函数,它还递归到嵌套对象。它与python3一起工作,参见https://github.com/MoserMichael/pprintex 你可以通过pip: pip install printex安装它

其他回答

要打印对象的当前状态,你可以:

>>> obj # in an interpreter

or

print repr(obj) # in a script

or

print obj

为你的类定义__str__或__repr__方法。来自Python文档:

__repr__(self)由repr()内置函数调用,由字符串调用 转换(反引号)到 计算“官方”字符串 对象的表示。如果有的话 可能,这看起来像a 有效的Python表达式 方法重新创建对象 相同的值(给定一个合适的 环境)。如果不可能, 形式为“<…一些有用的 描述……应该返回>。 返回值必须为字符串 对象。如果一个类定义了repr() 但不是__str__(),则__repr__()是 也用于“非正式”字符串 实例的表示 班级是必需的。这是典型的 用于调试,所以很重要 这个表示是 信息丰富且明确。 __str__(self)由str()内置函数调用,由print函数调用 语句来计算“非正式的” 对象的字符串表示形式。 这与__repr__()不同 它不必是一个有效的Python 表达:比较方便还是 可以使用简洁的表示 代替。返回值必须为a 字符串对象。

尝试ppretty

from ppretty import ppretty


class A(object):
    s = 5

    def __init__(self):
        self._p = 8

    @property
    def foo(self):
        return range(10)


print ppretty(A(), show_protected=True, show_static=True, show_properties=True)

输出:

__main__.A(_p = 8, foo = [0, 1, ..., 8, 9], s = 5)

如果你想在一个复杂的数据结构中看到所有的值,那么可以这样做:

from pprint import pprint
pprint(my_var)

其中my_var是您感兴趣的变量。当我使用pprint(vars(my_var))时,我什么都没有得到,这里的其他答案没有帮助,或者方法看起来不必要的长。顺便说一下,在我的特殊情况下,我正在检查的代码有一个字典的字典。

值得指出的是,对于一些自定义类,您可能只会得到一个无用的<someobject。0x7f739267f400>类型的输出。在这种情况下,你可能不得不实现一个__str__方法,或尝试一些其他的解决方案。

我还发现,在我获得这种对象类型输出的一个实例中,vars()显示了我想要的结果。因此,覆盖这两种情况的更好解决方案是分别尝试两种情况。但是使用vars()有时会抛出异常,例如,TypeError: vars()参数必须具有__dict__属性。

我仍然希望找到一些简单的,在所有场景下都可以工作的东西,而不需要第三方库。

Pprint包含一个“漂亮的打印机”,用于生成令人满意的数据结构表示。格式化程序生成的数据结构表示可以被解释器正确解析,并且易于人类阅读。如果可能的话,输出将保持在单行上,并在跨多行分割时缩进。

你需要vars()和pprint()的混合:

from pprint import pprint
pprint(vars(your_object))