簡體   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