Python中pool.map返回结果遍历时报错UnboundLocalError: local variable 'results' referenced before assignment如何解决
python 代码 def xc(list_url,filename): urls = wz_url(list_url) pool = ThreadPool(10) # 设置线程数 try: results = pool.map(wz_content, urls) # 开始跑数据 except Exception, e: print '\033[1;31m 报错信息:\033[0m' + str(e) pool.close() pool.join() # 4 行代码结束 for result in results: filename.write(result + '\n') filename.close()
报错信息 Traceback (most recent call last): File "laonanren.py", line 105, in <module> xc(k,v) File "laonanren.py", line 80, in xc for result in results: UnboundLocalError: local variable 'results' referenced before assignment
Python中pool.map返回结果遍历时报错UnboundLocalError: local variable 'results' referenced before assignment如何解决
这个问题通常是因为你在 pool.map 的回调函数或后续处理中,错误地引用了一个未在正确作用域内初始化的 results 变量。
看个典型错误示例:
from multiprocessing import Pool
def process_item(x):
return x * 2
if __name__ == '__main__':
with Pool() as pool:
# 错误:试图在map完成前就引用results
for result in results: # 这里会报错!
print(result)
results = pool.map(process_item, range(5))
正确写法应该是:
from multiprocessing import Pool
def process_item(x):
return x * 2
if __name__ == '__main__':
with Pool() as pool:
# 先获取结果,再遍历
results = pool.map(process_item, range(5))
# 现在可以安全遍历了
for result in results:
print(result)
关键点:
pool.map()是同步的,它会阻塞直到所有任务完成并返回结果列表- 必须先等
pool.map()执行完成并把返回值赋给变量,才能使用这个变量 - 确保变量在引用前已经正确赋值
如果是在回调函数里遇到这个问题,检查回调函数的参数接收和变量作用域。
一句话建议:确保在引用 results 变量之前,pool.map() 已经执行完成并赋值。

