【问题标题】:Attribute error using __builtin__ functions inside class method在类方法中使用 __builtin__ 函数的属性错误
【发布时间】:2011-07-23 23:00:09
【问题描述】:

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

谢谢 米

【问题讨论】:

    标签: python linux namespaces built-in


    【解决方案1】:

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

    【讨论】:

    • 这实际上似乎解决了问题。我认为它能够调用sum 但不能调用reduce,这很奇怪而且有点麻烦。你知道为什么吗?我使用python 2.7。谢谢!
    • 这只是我想到的一个快速破解:)。我不知道是什么导致了reduce 的问题,看起来它不在当前的命名空间中......但即使用另一个reduce 声明来遮蔽它也会产生不同的错误。也许你应该向 rdiff-backup 的人提交一个错误。
    猜你喜欢
    • 2017-12-24
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多