13

私はpythonが初めてで、マップに取り組んでいるとミンスミートの問題が軽減されます。mincemeat スクリプトの実行中に次のエラーが発生します。

$python mincemeat.py -p changeme localhost
error: uncaptured python exception, closing channel <__main__.Client connected at 0x923fdcc> 
(<type 'exceptions.NameError'>:global name 're' is not defined
 [/usr/lib/python2.7/asyncore.py|read|79]
 [/usr/lib/python2.7/asyncore.py|handle_read_event|438] 
 [/usr/lib/python2.7/asynchat.py|handle_read|140]
 [mincemeat.py|found_terminator|96]
 [mincemeat.py|process_command|194]
 [mincemeat.py|call_mapfn|170]
 [raw1.py|mapfn|43])

私のコードは、上記のスタックトレースで として与えられている raw1.py スクリプトにあります[raw1.py|mapfn|43]

import re
import mincemeat

# ...

allStopWords = {'about':1, 'above':1, 'after':1, 'again':1}

def mapfn(fname, fcont):
    # ...
    for item in tList[1].split():
        word = re.sub(r'[^\w]', ' ', item).lower().strip()        # ERROR
        if (word not in allStopWords) and (len(word) > 1):
            # ....

私はすでにreraw1.py にインポートしています。remincemeat.pyにインポートすると、エラーは表示されません。

4

3 に答える 3

13

mapfnimportステートメント自体が必要です。mapfn別のPythonプロセスで実行されるため、宣言された元のコンテキスト(インポートを含む)にアクセスできません。

于 2012-10-06T02:46:49.487 に答える
4

Pythonの「グローバル」変数は、実際にはそれらがバインドされているモジュール/ファイルにスコープされています。それらを使用するすべてのファイルにそれらをインポートする必要があります。

モジュール名は、他のものと同様に単なる変数です。

于 2012-10-04T10:16:42.870 に答える
0

この質問にはすでに回答済みのようです。mincemeat.py で re を使用する場合は、そこにも re をインポートする必要があります。

于 2012-10-04T10:17:15.703 に答える