1

arch Linux ボックスに rdiff-backup をインストールしたところ、属性エラーが発生しました。

AttributeError: 'module' object has no attribute 'reduce'

エラーは rdiff_backup クラスの 1 つに存在しますが、エラーを特定できません。関数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 に答える