2011-03-27 52 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