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如何解决

1 回复

这个问题通常是因为你在 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)

关键点:

  1. pool.map() 是同步的,它会阻塞直到所有任务完成并返回结果列表
  2. 必须先等 pool.map() 执行完成并把返回值赋给变量,才能使用这个变量
  3. 确保变量在引用前已经正确赋值

如果是在回调函数里遇到这个问题,检查回调函数的参数接收和变量作用域。

一句话建议:确保在引用 results 变量之前,pool.map() 已经执行完成并赋值。

回到顶部