Использование Python для проверки библиотеки, чтобы проверить, существует ли динамически названная функция - PullRequest
0 голосов
/ 03 мая 2019

Я запускаю программу на Python (Python 2.7.5), которая вызывает функции динамически, используя метод eval. Мне нужно выяснить, существует ли функция, прежде чем я сделаю какие-либо предварительные вычисления, необходимые для ее запуска, если она существует.

Для этого я пытался использовать библиотеку 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")

В данный момент он не возвращает правильное логическое значение относительно того, существует ли функция. Есть ли способ преобразовать «привет» + 1 в саму функцию (hello1 вместо «hello1»)

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Сначала необходимо получить, если возможно, объект, связанный с именем в текущей области.

if inspect.isfunction(globals().get('hello{}'.format(i))):

Если определено hello1, вызов get вернет объект, связанный с этим именем, и isfunction может определить, действительно ли это функция.

Если он не определен, get возвращает None, для которого isfunctionвернет False.

0 голосов
/ 03 мая 2019

Вы можете использовать блок try:

try:
    hello1
except NameError:
    print("The function does not exist")
else:
    print("The function exist")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...