2011-03-27 31 views
1

我在我的Arch Linux箱安装rdiff进行备份里面__builtin__功能只与属性错误落得:属性错误使用类方法

AttributeError: 'module' object has no attribute 'reduce' 

在rdiff_backup类存在一个错误,但我不能发现错误。功能reduce应该是内置的,并且我无法获取代码来查找功能。

从rdiff进行的代码如下所示:

def get_total_dest_size_change(self): 
     """Return total destination size change 

     This represents the total change in the size of the 
     rdiff-backup destination directory. 

     """ 
     addvals = [self.NewFileSize, self.ChangedSourceSize, 
          self.IncrementFileSize] 
     subtractvals = [self.DeletedFileSize, self.ChangedMirrorSize] 
     for val in addvals + subtractvals: 
       if val is None: 
         result = None 
         break 
     else: 
       def addlist(l): return reduce(lambda x,y: x+y, l) 
       result = addlist(addvals) - addlist(subtractvals) 
     self.TotalDestinationSizeChange = result 
     return result 

而在本地定义addlist功能发生错误。 我试图导入内置模块中的文件(statistics.py)的顶部,都喜欢

import __builtin__ 

from __builtin__ import reduce 

,并试图改变像这样的方法的命名空间:

def addlist(l): return __builtin__.reduce(lambda x,y: x+y, l) 

但是唉。还是一样的错误。

到目前为止,我还没有找到任何好的信息或解决方案,所以也许有人对python有一些更严格的认识可能会刺伤它。

由于 米

回答

0

reduce(lambda x,y: x+y, l)sum(l)等效。你可以试试sum(l)是否有效?此外,您使用的是哪种Python版本(sum可用于版本> = 2.3)

+0

这实际上似乎解决了这个问题。我认为它很奇怪,有点麻烦,它可以称为“sum”而不是“reduce”。你知道为什么吗?我使用python 2.7。谢谢! – Max 2011-03-27 16:36:21

+0

这只是一个快速入门而已:)。我不知道是什么原因导致了reduce的问题,看起来它不在当前的名称空间中......但是,即使用另一个“reduce”声明遮蔽它也会给出不同的错误。也许你应该向rdiff备份的人员提交一个bug。 – pajton 2011-03-27 16:39:36

+0

是的。那么谢谢你的修复:) – Max 2011-03-27 16:49:51