繁体   English   中英

Python:AttributeError:“模块”对象没有属性“附加”

[英]Python: AttributeError: 'module' object has no attribute 'append'

我正在尝试制作一个引擎,该引擎采用具有python文件并在其中包含函数的文件内容,格式如下:

lib1 func1 func2 func3
lib2 func4

等等。我用两个python文件和三个函数设置了一个测试,但是我用来导入库和函数的代码不起作用:

class engine (object):
    def __init__ (self, sceneFile):
        # gets contents of sceneFile, then closes
        scenes         = open (sceneFile, 'r')
        lines = scenes.readlines ()
        scenes.close ()
        self.libs = []

        # finds functions and libraries
        for i in range (len (lines)):
            lineContents = lines[i].split()
            self.libs.append (importlib.import_module (lineContents[0]))  # libraries in sceneFile
            for j in range (len (lineContents) - 1):
                self.libs[i].append (lineContents[j + 1])          # functions in sceneFile

    def start (self, nextScene):
        # finds function and library, imports
        for i in range (len (self.libs)):
            for j in range (len (self.libs[i])):
                if self.libs[i][j] == nextScene:
                    nextScene = getattr (self.libs[i], self.libs[i][j])
                    self.start (nextScene)

当我尝试使用测试程序运行它时,会弹出此错误:

Traceback (most recent call last):
  File "ugsE.py", line 32, in <module>
    Engine = engine ("ugsEtest.txt")
  File "ugsE.py", line 21, in __init__
    self.libs[i].append (lineContents[j + 1])          # functions in sceneFile
AttributeError: 'module' object has no attribute 'append'

这是什么意思? 我感觉这是因为我正在创建模块列表,但这不行吗?

libs是模块列表,因此libs[i]是模块。 libs[i].append失败,因为您无法将某些内容附加到模块中。

严格地说,这个代码实际上在偶然的情况下运行libs[i]是公开自己的模块append方法(与兼容的签名),但是这肯定是你想要的东西是不行的。


您可以通过将libs变成元组列表来实现所需的功能,其中第一个元素是库,第二个元素是与该库关联的函数的列表:

for line in lines:
    lineContents = line.split()
    self.libs.append((importlib.import_module(lineContents[0]), lineContents[1:]))

然后,您可以将库i作为self.libs[i][0] ,将函数j作为self.libs[i][1][j]

如果愿意,还可以使用sliceslist comprehensionswith语句消除循环并将整个__init__减少到仅三行:

with open(sceneFile, 'r') as scenes:
    lines = (l.split() for l in scenes)
    self.libs = [(importlib.import_module(l[0]), l[1:]) for l in lines]

libs看起来像数组的元素 除非您可以保证self.libs[i]本身就是一项麻烦,否则它将没有append方法。

如果要“附加”在索引上,请使用insert(i, x)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM