python pprint显示数据但print显示空值

时间:2014-08-20 12:37:13

标签: python

我正在尝试获取串口输出。当我尝试使用pprint时,它将以字节码显示,但当我尝试使用打印时,它将变为空。

ser = serial.Serial('/dev/ttyUSB0', timeout=5)
while True:
    x = ser.readline()
    print x
    pprint.pprint(x)

1 个答案:

答案 0 :(得分:0)

您看到的差异是因为pprint.pprint安全地获取了对象的repr,而print正在获取对象的str

考虑这个例子:

class Foo(object):
  def __repr__(self):
    return 'repr'
  def __str__(self):
    return 'str'

print Foo()  # prints 'str', not 'repr'

如果您想了解如何实施pprint.pprint,请查看帮助页面。在我的OSX笔记本电脑上,我看到了这一点(使用ipython):

Python 1.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import pprint

In [2]: help(pprint)

Help on module pprint:

NAME
    pprint - Support to pretty-print lists, tuples, & dictionaries recursively.

FILE
    //anaconda/python.app/Contents/lib/python2.7/pprint.py
...

从这里开始,我知道pprint的来源位于//anaconda/python.app/Contents/lib/python2.7/pprint.py

要在ipython中查看,我可以这样打开它:

In [3]: !less //anaconda/python.app/Contents/lib/python2.7/pprint.py

从这里我们可以搜索文件中的代码,以追溯pprint.pprint实际上的工作原理。

切入追逐,pprint.pprint使用复杂而细致的repr函数为您提供字节码。