![](/img/trans.png)
[英]AttributeError: 'str' object has no attribute 'append' python
[英]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]
。
如果願意,還可以使用slices , list comprehensions和with語句消除循環並將整個__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.