Python NameError:全局名称'线程'没有定义

时间:2015-03-05 08:46:26

标签: python

我创建了一个名为thread.py的文件,如果我要导入它,它就不起作用了。当我使用像cheese.py这样的文件名时,它可以正常工作

import json
from thread import Thread
class Board:
        name = ""
        shortcode = ""
        threads = []
        url = ""
        api_url = ""
        json = ""

        def __init__(self, board, api_url, json):
                self.shortcode = board
                self.api_url = api_url
                self.json = json
                self.__getPosts()

        def __getPosts(self):
                i = 0
                for thread in self.json[0]['threads']:
                        thread = Thread()
                        self.threads[i] = thread
                        i+=1

thread.py

class Thread:
        def __init__(self):
                i = 1

2 个答案:

答案 0 :(得分:5)

名称为thread的内置模块已存在。

>>> import thread
>>> thread
<module 'thread' (built-in)>

当您尝试使用from thread import Thread导入时,它会尝试搜索内置thread模块中不存在的名为Thread的属性。

>>> hasattr(thread, 'Thread')
False

当导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,则会在变量sys.path给出的目录列表中搜索名为spam.py的文件。

sys.path已从以下位置初始化:

  • 包含输入脚本(或当前目录)的目录。

  • PYTHONPATH(目录名列表,语法与shell变量PATH相同)。

  • 依赖于安装的默认值。

了解更多here

建议您使用与内置模块名称不同的用户定义模块名称。

答案 1 :(得分:-1)

Python 3具有内置的模块Threading,该模块具有名为Thread

的类。

这会引起冲突,因此请考虑将文件重命名为其他名称。