1

我在我的 Arch linux 机器上安装了 rdiff-backup ,结果却出现了属性错误:

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 有更深入了解的人可以尝试一下。

谢谢米

4

1 回答 1

0

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

于 2011-03-27T16:31:55.053 回答