使用变量调用函数
Calling a function with a variable
我正在遍历一个目录,将感兴趣的特定文件(包含在一个列表中)发送到它们相应的函数,这些函数的名称与列表中的项目类似。
import os,sys,argparse
import Contact_parse
import Notes_parse
import Records_parse
...
def file_distro(dir):
'''
This function distributes the source files to their relevant parser scripts
'''
file_types = ["Contact","Notes","Records"]
for filename in os.listdir(dir):
for t in file_types:
if filename.startswith(t) and filename.endswith(".xml"):
print("%s: %s") % (t,filename) # Troubleshooting, works
try:
func = getattr("%s_parse" % (t),main)
# Returns TypeError: getattr(): attribute name must be string
#func = getattr(Contact_parse, main)
# Tried hardcoding to troubleshoot,
# also returns TypeError: getattr(): attribute name must be string
#print("%s_parse" % t) # Troubleshooting, works
except AttributeError:
print("function not found: %s_parse.main" % (t))
else:
func()
else:
continue
收到的错误是:
getattr(): attribute name must be string
根据此处的搜索尝试使用 getattr 语言,并且在使用 getattr、local/globals 或字典之间进行了重要讨论。我什至尝试硬编码模块名称,也无济于事。非常感谢任何帮助。
getattr()
函数将第一个参数作为有效的 python 实体(object/module...等)并将第二个参数作为字符串。
在你的情况下替换
getattr("%s_parse" % (t),main)
与
getattr(Contact_parse, 'main')
应该可以。
但是如果你的模块名称像你的情况一样是字符串形式,也许你可以试试,
getattr(sys.modules[t + "_parse"], 'main')
这就是我的工作方式,但是我的所有功能都是 class 方法。
getattr(ClassName(), functionName)(fargs_in)
我正在遍历一个目录,将感兴趣的特定文件(包含在一个列表中)发送到它们相应的函数,这些函数的名称与列表中的项目类似。
import os,sys,argparse
import Contact_parse
import Notes_parse
import Records_parse
...
def file_distro(dir):
'''
This function distributes the source files to their relevant parser scripts
'''
file_types = ["Contact","Notes","Records"]
for filename in os.listdir(dir):
for t in file_types:
if filename.startswith(t) and filename.endswith(".xml"):
print("%s: %s") % (t,filename) # Troubleshooting, works
try:
func = getattr("%s_parse" % (t),main)
# Returns TypeError: getattr(): attribute name must be string
#func = getattr(Contact_parse, main)
# Tried hardcoding to troubleshoot,
# also returns TypeError: getattr(): attribute name must be string
#print("%s_parse" % t) # Troubleshooting, works
except AttributeError:
print("function not found: %s_parse.main" % (t))
else:
func()
else:
continue
收到的错误是:
getattr(): attribute name must be string
根据此处的搜索尝试使用 getattr 语言,并且在使用 getattr、local/globals 或字典之间进行了重要讨论。我什至尝试硬编码模块名称,也无济于事。非常感谢任何帮助。
getattr()
函数将第一个参数作为有效的 python 实体(object/module...等)并将第二个参数作为字符串。
在你的情况下替换
getattr("%s_parse" % (t),main)
与
getattr(Contact_parse, 'main')
应该可以。
但是如果你的模块名称像你的情况一样是字符串形式,也许你可以试试,
getattr(sys.modules[t + "_parse"], 'main')
这就是我的工作方式,但是我的所有功能都是 class 方法。
getattr(ClassName(), functionName)(fargs_in)