我正在使用别人的Python代码,它动态地导入了许多模块:
mod = __import__('outputs.'+filename,fromlist=['a']) #why does this work
显然,最后评论的存在有点令人担忧,但是我已经开始理解其他SO问题了。它成功导入了许多其他模块,但是只有一个特定文件:
filename = "http"
print(filename)
mod = __import__('outputs.'+filename,fromlist=['a']) #why does this work
print("success")
这给出了以下输出:
http
TypeError: list indices must be integers, not str
据我所知,这肯定是那条线问题;如果我将['a']
更改为[]
,那么我会改为AttributeError
。
我尝试导入的模块的开头看起来与其他成功导入的模块相同(语法上):
<various import statements>
class http(output.Output):
<some variables>
def __init__(self,data):
<some stuff>
<some more defs>...
我很感激任何人可能有关于它为什么不起作用的建议。我是否应该专注于行为不端的模块本身而不是__import__
声明(因为这适用于其他一切)?即使只是一个答案的提示也会很好!我不确定它是不是奇怪的东西,我对Python的不熟悉,或者只是其中一个看不见的树木日子!感谢。
答案 0 :(得分:0)
查看__import__
fromlist
,它表示仅当http
不为空时才会返回子模块 - 所以我会猜测是谁写的那个是尝试要将whatever
或mod
加入outputs
,而不是fromlist
,__import__
就行了,尽管原因不明。
我可以提供的另一件事是,可以用自己的功能替换*
,也许这就是PP *所做的那样?
{{1}} PP =以前的程序员
答案 1 :(得分:0)
谢谢大家。在弄清楚如何获得完整的追溯之后,它清楚地表明问题在于我正在尝试加载的模块,并且与上面的任何代码无关。抱歉发表这样的反思,基本问题,但也要感谢你直接指导解决方案!