gpt4 book ai didi

python - imp.load_source : 'module' has no attribute 'foo' 出现问题

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

我有一个目录,其中包含任意数量的模块,每个模块仅包含一个函数do_stuff。例如:

foos/
__init__.py
foo_1.py
foo_2.py
...
foo_n.py

例如,foo_1.py 可能是:

def do_stuff(bar):
if bar.blah:
return True
return False

我想从代码中的其他地方收集并运行所有 do_stuff 函数。我认为使用 imp 模块这会很容易:

import imp
...
...

FOOS_DIR = os.path.join(MY_HOME, 'foos/')
MOD_REGEX = r'^(?!__).*\.py$'

foos = [imp.load_source(fname.split('.py')[0], FOOS_DIR)
for fname in os.listdir(FOOS_DIR)
if re.match(MOD_REGEX, fname)]

results = [foo.do_stuff('argument!') for foo in foos]

但是,这会导致:

AttributeError: "'module' object has no attribute 'do_stuff'"

来自最上面的答案here ,我认为这是要走的路。如果是的话,也许我的语法有问题?毕竟,load_source 确实很宽容:

(pdb) imp.load_source('not_there', FOOS_DIR)
<module 'not_there' from '/home/blah/blah/foos'>

否则,我会错过什么?

最佳答案

确实是语法问题!我需要模块文件的完整路径,而不仅仅是其目录,作为 load_source 的第二个参数:

因此,

foos = [imp.load_source(fname.split('.py')[0], FOOS_DIR)              
for fname in os.listdir(FOOS_DIR)
if re.match(MOD_REGEX, fname)]

成为

foos = [imp.load_source(fname.split('.py')[0], '%s%s' % (FOOS_DIR, fname))              
for fname in os.listdir(FOOS_DIR)
if re.match(MOD_REGEX, fname)]

而且效果很好!

关于python - imp.load_source : 'module' has no attribute 'foo' 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34816879/

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