我正在尝试获取串口输出。当我尝试使用pprint时,它将以字节码显示,但当我尝试使用打印时,它将变为空。
ser = serial.Serial('/dev/ttyUSB0', timeout=5)
while True:
x = ser.readline()
print x
pprint.pprint(x)
答案 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
函数为您提供字节码。