Глобальное имя 're' не определено

Я новичок в python и работаю на карте, уменьшая проблему с фаршем. Я получаю следующую ошибку при запуске mincemeat script.

$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 script, который указан в вышеуказанной таблице stacktrace как [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):
            # ....

Я уже импортировал re в raw1.py. Ошибка не появляется, если я импортирую re в файл mincemeat.py.

Ответ 1

Вам нужно иметь оператор import в mapfn. mapfn выполняется в другом процессе python, поэтому он не имеет доступа к исходному контексту (включая импорт), в котором он был объявлен.

Ответ 2

"Глобальные" переменные в python фактически привязаны к модулю/файлу, в который они привязаны; вам нужно импортировать их в каждый файл, который их использует.

Имя модуля - это просто переменная, как и все остальное.

Ответ 3

Похоже, вы уже ответили на этот вопрос. Если вы используете re в mincemeat.py, вам также нужно будет импортировать туда.