Python:生成类实例会产生AttributeError

Python:生成类实例会产生AttributeError,python,class,instance,Python,Class,Instance,我有个问题。当我试图创建一个类实例时,我得到了一个错误。 下面是一些代码: import parser def main(): tokens = [["TYPE_ONE", "value one"], ["TYPE_TWO", "value two"]] parse = parser.Parser(tokens) parse.parse() main() 和parser.py: class Parser(object): def __init__(self,

我有个问题。当我试图创建一个类实例时,我得到了一个错误。 下面是一些代码:

import parser

def main():
    tokens = [["TYPE_ONE", "value one"], ["TYPE_TWO", "value two"]]
    parse = parser.Parser(tokens)
    parse.parse()

main()
和parser.py:

class Parser(object):
    def __init__(self, tokens):
        self.tokens = tokens
        self.token_index = 0

    def parse(self):
        while self.token_index < len(self.tokens):
        token_type = self.tokens[self.token_index][0]
        token_value = self.tokens[self.token_index][1]
        print(token_type, token_value)
        self.token_index += 1
类解析器(对象):
定义初始化(自我,令牌):
self.tokens=令牌
self.token_索引=0
def解析(自我):
当self.tokens_索引
但是脚本给出了以下错误:

Traceback (most recent call last):
  File "C:/Users/edyal/OneDrive/Desktop/Paigoa/src/main.py", line 8, in <module>
    main()
  File "C:/Users/edyal/OneDrive/Desktop/Paigoa/src/main.py", line 5, in main
    parse = parser.Parser(tokens)
AttributeError: module 'parser' has no attribute 'Parser'
回溯(最近一次呼叫最后一次):
文件“C:/Users/edyal/OneDrive/Desktop/Paigoa/src/main.py”,第8行,在
main()
文件“C:/Users/edyal/OneDrive/Desktop/Paigoa/src/main.py”,第5行,在main中
parse=parser.parser(标记)
AttributeError:模块“parser”没有属性“parser”

这是python中的一个经典难题:如果您将模块命名为某个已经存在的名称,那么您就不会得到您想要的模块。通常情况下,情况正好相反。例如,调用csv解析器csv.py,然后在内部尝试导入csv。您自己导入的不是标准的python csv模块

在本例中,情况必须相反:您希望导入解析器模块,而获得标准解析器模块。如果我导入解析器,我会得到以下结果:

>>> import parser
>>> dir(parser)
['ParserError', 'STType', '__copyright__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_pickler', 'compilest', 'expr', 'isex
pr', 'issuite', 'sequence2st', 'st2list', 'st2tuple', 'suite', 'tuple2st']
首先,我建议将parser.py重命名为更具体的名称,如paigoa\u token\u parser.py 现在更改您的导入:

import paigoa_token_parser
现在可能会出现导入错误,此时应检查路径。您的解析器是否与main.py位于同一文件夹中?如果没有,那么您可能希望将其添加到python路径中,从:

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

内置模块列表取决于安装,通常是标准库的一小部分,并且
解析器
模块不太可能是安装中的内置模块(您可以通过在sys.builtin\u module\u names
行中执行
'parser'来检查是否是内置模块)

更有可能的是,问题出在您的目录结构中。例如,如果目录结构如下所示:

.
main.py
└── parser
    ├── __init__.py
    └── parser.py

而且
\uuuu init\uuuuuuuuuuuuupy
不导入
parser.py
,要导入
parser/parser.py
您必须执行以下代码:
从parser导入parser

您可能是无意中从stdlib导入的。python似乎从标准库导入了
parser
模块。请显示您的目录结构