Ваше заявление 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
.
О, хорошо. Но почему лучше использовать globals() вместо eval()? Разве они не выполняют одно и то же? – Ivy
Поскольку ['eval' является опасным] (http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html) –