Я установил 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 мог бы нанести ему удар.
Спасибо т
reduce(lambda x,y: x+y, l)
является эквивалентом sum(l)
. Можете ли вы попробовать, работает ли sum(l)
? Кроме того, какую версию python вы используете (sum
доступен в версии >= 2.3)
sum
но неreduce
. Ты знаешь почему? Я использую Python 2.7. Спасибо!reduce
, похоже, что его там нет в текущем пространстве имен ... Но даже дублирование с другим объявлениемreduce
даст другую ошибку. Может быть, вы должны сообщить об ошибке людям с rdiff-backup.