Ошибка атрибута при использовании функций __builtin__ внутри метода класса

1

Я установил 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

И ошибка возникает в локально определенной функции списка. Я попытался импортировать встроенный модуль в верхнюю часть файла (statistics.py), как

import __builtin__

и

from __builtin__ import reduce

и попытался изменить пространство имен метода следующим образом:

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

Но, увы. Все те же ошибки.

Я пока не смог найти какую-либо полезную информацию или решение, поэтому, возможно, кто-то с немного более плотным знанием о python мог бы нанести ему удар.

Спасибо т

Теги:
namespaces
built-in

1 ответ

0
Лучший ответ

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

  • 0
    Это на самом деле казалось, чтобы решить проблему. Я думаю, что это очень странно и немного надоедает, что он может назвать sum но не reduce . Ты знаешь почему? Я использую Python 2.7. Спасибо!
  • 0
    Это был просто быстрый взлом, который пришел мне в голову :). Я не знаю, что вызывает проблему с reduce , похоже, что его там нет в текущем пространстве имен ... Но даже дублирование с другим объявлением reduce даст другую ошибку. Может быть, вы должны сообщить об ошибке людям с rdiff-backup.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню