![](/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.