Попробуйте - кроме неизвестной функции?

Я пытаюсь создать функцию, которая будет проверять, существует ли функция или нет, а затем возвращать логическое значение, основываясь на том, существует она или нет.

Вот мой код; Тем не менее, Python IDLE 3.5 говорит мне, что произошла ошибка с моим оператором eval(), но я не вижу, что не так:

def testFunction(entity):
    try eval(entity)():
        return True
    except NameError:
        return False

Может кто-нибудь помочь?

1 ответ

Решение

Ваш try утверждение неверно. Это должно было быть -

def testFunction(entity):
    try: return callable(eval(entity))
    except NameError:
        return False

Вам также не нужно вызывать функцию (чтобы проверить, доступна она или нет). Выше используется встроенная функция callable, чтобы проверить, является ли entity это функция / класс или около того.


Но если вы проверяете для простых функций (а не встроенные функции или функции модуля, такие как module.function) Я бы сказал, что было бы лучше использовать globals() словарь и поиск в нем, а не с помощью eval(), Пример -

def testFunction(entity):
    try: return callable(globals()[entity])
    except KeyError:
        return False

Обратите внимание, что выше не вернется True для встроенных функций или функций, к которым вы получаете доступ, как - module.function и т. д. Если вам необходимо проверить их, и если вы доверяете источнику, откуда вы получаете entity, вы можете вернуться к использованию eval,

Другие вопросы по тегам