我是python的新手,正在处理地图减少肉馅的问题。我在运行肉馅脚本时收到以下错误。
$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):
# ....
我已经在 raw1.py 中导入了re
。如果我在 mincemeat.py 中导入re
,则不会出现此错误。
mapfn
本身中包含导入语句。 mapfn
在不同的 python 进程中执行,因此它无法访问声明它的原始上下文(包括导入)。
python中的"全局"变量实际上作用域为它们绑定的模块/文件;你确实需要将它们导入到使用它们的每个文件中。
模块名称与其他任何变量一样只是一个变量。
听起来你已经回答了这个问题。如果您在 mincemeat.py 中使用 re,则还需要在那里导入 re。