如何防止Python打印类型信息?

如何防止Python打印类型信息?,python,python-2.7,printing,Python,Python 2.7,Printing,(这个问题与此有某种关联。) 我有一个对象“o”,它是从第三方模块(其代码相当复杂)返回的。 打印此对象时,我得到以下输出: >>> print(o) [{'pid': [unsigned int:UniqueProcessId]: 0x000007FC, 'name': [String:ImageFileName]: 'leon.exe\x00', 'offset': 2236079360}] >>> smartprint(o) [{'pid': 0x

(这个问题与此有某种关联。)

我有一个对象“o”,它是从第三方模块(其代码相当复杂)返回的。 打印此对象时,我得到以下输出:

>>> print(o)
[{'pid':  [unsigned int:UniqueProcessId]: 0x000007FC, 'name':  [String:ImageFileName]: 'leon.exe\x00', 'offset': 2236079360}]
>>> smartprint(o)
[{'pid': 0x000007FC, 'name': 'leon.exe', 'offset': 2236079360}]
据我所知,这是一份字典清单。 但是,输出还包含一些额外的类型信息(例如:[unsigned int:UniqueProcessId]),这些信息阻止我使用“ast”模块(即使用ast.literal_eval()函数)解析此输出

我的问题是:如何避免打印此类信息? 也就是说,我希望获得以下输出:

>>> print(o)
[{'pid':  [unsigned int:UniqueProcessId]: 0x000007FC, 'name':  [String:ImageFileName]: 'leon.exe\x00', 'offset': 2236079360}]
>>> smartprint(o)
[{'pid': 0x000007FC, 'name': 'leon.exe', 'offset': 2236079360}]
另外:你能解释一下为什么要打印这些信息,以及它实际上代表了什么吗? 如果我像下面的代码一样在循环中打印单个值:

    for ps in out:
    first = True
    for info in ps:
        if first:
            first = False
        else:
            print '\'%s\':\'%s\'' % (info, ps[info])
我没有得到任何额外的类型信息。相反,我得到的是:

'pid':'2044'
'name':'leon.exe'
'offset':'2236079360'

为什么?

看起来这些类型是详细的信息,不属于键值的一部分。我建议使用内置类型函数

data = {"hello": 1}
# print the type for the object
print(type(data))

# to get for each key,val
for k,v in data.iteritems():
    print(type(k), type(v))
输出:

<type 'dict'>
(<type 'str'>, <type 'int'>)

(, )

尝试
%r
而不是
%s
。您的值不是普通的整数和字符串。他们是另外一些奇怪的类型。查看文档,了解您在哪里获得这些值。请注意,无论您如何使用该dict,
ast.literal\u eval
都无法从您的输出重构原始dict,因为它不知道如何生成您用作值的任何奇怪对象。不过,您可以为这些值重建类似于普通Python类型的内容。您是自己定义这个
o
对象的类,还是在某个第三方模块中定义的?如果它是您自己的类,您应该为它编写一个更好的
\uuu repr\uuu
和/或
\uu str\uuu
方法。如果它是第三方类,您可以使用新的
\uuuu repr\uuuu
和/或
\uuu str\uuuu
方法为它编写包装类。@user2357112谢谢您的回答。这正是我面临的问题。我希望得到一个没有这些奇怪类型信息的输出,以便让ast.literal\u eval正常工作。我不需要复制同一个对象,我只需要它来解析它并创建一个简单的字典列表(包含所有字符串值)。@PM2Ring感谢您的建议。它是从第三方模块接收的。我实际上不知道如何编写包装器类和重新定义这些方法,但我想这是一个可行的选择,可以正确显示输出。我只是想知道是否有可能使用打印功能(或任何替代功能)只打印值,从而获得可分析的输出。OP不是问如何打印变量的类型,正如Chris_Rands所说,我只是想要值,以正常“打印”输出的相同形式,但没有类型信息。