gpt4 book ai didi

Python: AttributeError: 'module' 对象没有属性 'append'

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:17 24 4
gpt4 key购买 nike

我正在尝试制作一个引擎,该引擎以如下格式获取包含 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 消除循环并将整个 __init__ 减少到只有三行, list comprehensions , 和一个 with statement :

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]

关于Python: AttributeError: 'module' 对象没有属性 'append',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30804825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com