2014-01-04 5 views
14

В python, как вы проверяете, существует ли функция без фактического запуска функции (т. Е. С помощью try)? Я бы тестировал, существует ли он в модуле.Python проверить, существует ли функция без попытки

+0

зависит от контекста, если это класс, если глобальное определено, вы-придется расширить вопрос предоставить больше элементов. –

ответ

20

Вы можете использовать dir, чтобы проверить, если имя в модуле:

>>> import os 
>>> "walk" in dir(os) 
True 
>>> 

В примере кода выше, мы тестируем для функции os.walk.

+5

И тогда, чтобы узнать, действительно ли это функция, 'callable (getattr (os, 'walk'))' – Mattias

+2

Что делать, если я хочу знать, существует ли она в глобальном пространстве имен (или из существующего импорта)? –

6

Вы предложили tryexcept. Вы можете действительно использовать, что:

try: 
    variable 
except NameError: 
    print("Not in scope!") 
else: 
    print("In scope!") 

Это проверяет variable находится в области видимости (это не вызов функции).

+1

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

+2

@ fun4jimmy Это не вызывает функцию - для которой требуется 'variable()'. Он просто проверяет, определена ли «переменная». – rlms

+0

О, я не понимал, что ты можешь это сделать. Кажется, я не могу удалить downvote, если вы не отредактируете свой ответ. Можете ли вы изменить что-то незначительное, чтобы я мог его удалить? – fun4jimmy

5
Solution1: 
import inspect 
if (hasattr(m, 'f') and inspect.isfunction(m.f)) 

Solution2: 
import inspect 
if ('f' in dir(m) and inspect.isfunction(m.f)) 

где:
м = имя модуля
е = функция, определенная в м

Смежные вопросы