NameError: 名称 ‘threading’ 未在 Python 中定义
NameError: name ‘threading’ is not defined in Python
Python“NameError: name ‘threading’ is not defined”发生在我们使用
threading
模块而不先导入它时。要解决错误,请
threading
在使用之前导入模块 – import threading
。
下面是错误如何发生的示例。
主程序
import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # ⛔️ NameError: name 'threading' is not defined threading.Thread(target=worker, daemon=True).start() for item in range(15): q.put(item) q.join() print('All work completed')
为了解决这个错误,我们必须导入
线程模块。
主程序
# ✅ import threading module first import threading import queue q = queue.Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() threading.Thread(target=worker, daemon=True).start() for item in range(15): q.put(item) q.join() print('All work completed')
即使该threading
模块在 Python 标准库中,我们仍然需要在使用前导入它。
t
确保在导入时没有使用大写字母,因为模块名称区分大小写。 threading
另外,请确保您没有导入threading
嵌套范围,例如函数。在顶层导入模块,以便能够在整个代码中使用它。
导入整个threading
模块的替代方法是仅导入您的代码使用的函数和类。
主程序
# 👇️ import only Thread class from threading import Thread from queue import Queue q = Queue() def worker(): while True: item = q.get() print(f'Working on {item}') print(f'Finished {item}') q.task_done() # 👇️ accessing Thread class directly Thread(target=worker, daemon=True).start() for item in range(15): q.put(item) q.join() print('All work completed')
该示例显示了如何从模块导入Thread
类。threading
例如threading.Thread
,我们现在直接访问它们,而不是访问模块上的成员。
这应该是您的首选方法,因为它使您的代码更易于阅读。
例如,当我们使用诸如 之类的导入时
import threading
,很难看出文件中使用了模块中的哪些类或函数。 threading
相反,当我们导入特定的类时,更容易看出threading
正在使用模块中的哪些类和方法。
您可以通过访问官方文档threading
查看该模块提供的所有类和方法。
结论
Python“NameError: name ‘threading’ is not defined”发生在我们使用
threading
模块而不先导入它时。要解决错误,请
threading
在使用之前导入模块 – import threading
。