Pympler引发TypeError错误

8
在Python2.7中,遵循Pympler示例example
from anotherfile import somefunction, somecustomclass
from os import path, listdir
import pandas as pd
import gc
from pympler import tracker, muppy, summary

all_objects = muppy.get_objects()
print 'all objects: ', len(all_objects)
sum1 = summary.summarize(all_objects)
summary.print_(sum1)

这是导入之后的第一段代码。它会产生以下结果。
/usr/bin/python2.7 /myprog.py
all objects:  98755
Traceback (most recent call last):
File "/myprog.py", line 12, in <module>
sum1 = summary.summarize(all_objects)
File "/usr/local/lib/python2.7/dist-packages/pympler/summary.py", line 131, in summarize
total_size[otype] = _getsizeof(o)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 130, in __sizeof__
return super(self, PandasObject).__sizeof__()
TypeError: super() argument 1 must be type, not FrozenList

Process finished with exit code 1

当我尝试初始化SummaryTracker对象时,我会遇到相同的错误。
看起来这是Pympler中的一个bug,但我找不到任何相关信息来证实这一点。根据官方文档所述,“Pympler完全使用Python编写,没有依赖于外部库。它已在Linux、Windows和MacOS X上使用Python 2.5、2.6、2.7、3.1、3.2、3.3、3.4进行了测试。” 实际上,在新的python文件中仅运行以下代码并使用python 2.7时,不会产生任何错误,并且按预期工作:
from pympler import muppy, tracker

tr = tracker.SummaryTracker()
tr.print_diff()

那么我错过了什么?

3个回答

2

看起来是pandas库中的问题。我通过编辑库代码解决了这个问题。错误的轨迹会指示你哪一行是错误的:

File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 130, in __sizeof__ 
return super(self, PandasObject).__sizeof__()

您只需要像这样更改参数的顺序即可:

return super(PandasObject, self).__sizeof__()

我做到了,我的程序正常运行。


1
这是Pandas问题#12924PandasObject.__sizeof__ 的参数在super调用中的顺序不正确。已经修复并已经更新,应该在下一个版本中可用。同时,您可以编辑pandas/core/base.py以更改参数顺序,或者测试错误是否存在并使用更正版本进行猴子补丁。

1
2017年2月6日:更新pandas解决了我的问题。 - Matt Kleinsmith

0

很可能这段代码只能在Python3中运行。在this question中,对于Python2也有相同的错误,如果你看一下被接受的回答,它说:

super()(没有参数)是在Python3中引入的:

super() -> same as super(class, )

所以这将是新式类的Python2等效写法:

super(CurrentClass, self)

如果你不想改变库代码,那么你可能需要使用Python3。


谢谢,我应该提到我已经考虑过这个问题了(将添加到原始问题中)。Pympler文档指出:“Pympler完全使用Python编写,没有依赖于外部库。它已在Linux、Windows和MacOS X上测试了Python 2.5、2.6、2.7、3.1、3.2、3.3、3.4。” - Darina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接