Ошибка атрибута при использовании функций __builtin__ внутри метода класса - PullRequest
1 голос
/ 27 марта 2011

Я установил rdiff-backup на свой пакет arch linux только для того, чтобы в результате появилась ошибка атрибута:

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 мог бы попробовать его.

Спасибо м

1 Ответ

0 голосов
/ 27 марта 2011

reduce(lambda x,y: x+y, l) является эквивалентом sum(l).Можете ли вы попробовать sum(l) работает?Кроме того, какую версию Python вы используете (sum доступна в версии> = 2.3)

...