使用Python的检查库检查是否存在动态命名的函数

时间:2019-05-03 15:53:54

标签: python function

我正在运行一个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”)

2 个答案:

答案 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