2015-11-07 8 views
7

私は最近python-WikEdDiffパッケージを私のシステムにインストールしました。私はそれがオリジナルのJavaScript WikEdDiffツールのPython拡張であることを理解しています。私はそれを使用しようとしましたが、私はそれのためのドキュメントを見つけることができませんでした。私はWikEdDiff.diff()を使用して立ち往生しています。私は、このようなgetFragments()などとして、このクラスの他の機能を使用したいが、チェックの上、それは次のエラーを示しています。チェックオンpython-WikEdDiffはどのように使用しますか?

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/WikEdDiff/diff.py", line 1123, in detectBlocks 
    self.getSameBlocks() 
    File "/usr/local/lib/python3.4/dist-packages/WikEdDiff/diff.py", line 1211, in getSameBlocks 
    while j is not None and self.oldText.tokens[j].link is None: 
IndexError: list index out of range 

を、私は、オブジェクト内のtokens[]構造が、一方、空のままであることが分かりました初期化されているはずです。

デフォルトコンストラクタとは別に呼び出しが必要なinitialize関数はありますか?それともコンストラクタに渡した `WikEdDiffConfig 'コンフィグレーション構造と関係がありますか?

+0

のpython3の例は、ここでビュー・ソースがあります。https://github.com/lahwaacz/python-wikeddiff/blob/master/WikEdDiff/__init__.py –

答えて

3

コードのthis sectionに示すようWikEdDiffオブジェクトは、diff()内で内部的にクリアされたため、このエラーが発生します。

def diff(self, oldString, newString): 
    ... 
    # Free memory 
    self.newText.tokens.clear() 
    self.oldText.tokens.clear() 
    # Assemble blocks into fragment table 
    fragments = self.getDiffFragments() 
    # Free memory 
    self.blocks.clear() 
    self.groups.clear() 
    self.sections.clear() 
    ... 
    return fragments 

あなただけの断片が必要な場合は、次のようにdiff()の返される変数を使用します。

import WikEdDiff as WED 
config=WED.WikEdDiffConfig() 
w = WED.WikEdDiff(config) 
f = w.diff("abc", "efg") 
# do whatever you want with f, but don't use w 
print(' '.join([i.text+i.type for i in f])) 
# outputs '{ [ (> abc- ) abc< efg+ ] }' 
関連する問題