我正在运行一个Python程序(Python 2.7.5),该程序使用eval方法动态调用函数。我需要找出该函数是否存在-在此之前-如果存在该函数,我需要执行运行该函数所需的任何先决条件计算。
为此,我一直在尝试使用inspect python库,该库使用inspect.isfunction(foo)。但是,它不能采用动态命名的函数作为字符串来确定该函数是否存在。
import inspect
for i in range(1, 4):
if inspect.isfunction("hello" + i):
print("Function does exist")
else:
print("Does not exist")
def hello1():
print("Hello")
def hello3():
print("Hello2")
目前,它还没有返回关于该函数是否存在的正确布尔值。有什么方法可以将“ hello” +1转换为函数本身(hello1而不是“ hello1”)
答案 0 :(得分:0)
您可以使用try
块:
try:
hello1
except NameError:
print("The function does not exist")
else:
print("The function exist")
答案 1 :(得分:0)
如果可能的话,您首先需要获取绑定到当前作用域中 name 的对象。
if inspect.isfunction(globals().get('hello{}'.format(i))):
如果定义了hello1
,则对get
的调用将返回绑定到该名称的对象,并且isfunction
可以确定它是否确实是一个函数。
如果未定义,则get
返回None
,为此isfunction
将返回False
。