Тестирование на наличие IPython

У меня есть тот же код, который я иногда запускаю из командной строки, как python source.py и иногда копировать / вставлять его в интерактивный IPython. Я хотел бы выполнить немного другой код в любом случае, и попытался внедрить различия в следующий блок кода:

try:
    __IPYTHON__
    # do IPython-mode code
except NameError:
    # do script-mode code

Я знаю, что в Python это распространенный метод, но он облажает автоматическое пометка в PyCharm, и я надеялся найти более привлекательный способ проверки на наличие IPython, возможно, путем тестирования '__IPYTHON__' in ... или что-то подобное. Тем не менее, я увидел, что этот символ не находится ни в locals() ни в globals(), Есть ли другое место, которое я могу проверить на его наличие, или любое другое, более традиционное, не использующее исключения напрямую?

Я использую Python 2.7.11 и IPython 5.1.0. Большое спасибо.

ОБНОВЛЕНИЕ Связано, но бесполезно: Как проверить, существует ли переменная?

2 ответа

Решение

Я думаю, что вы ищете

if hasattr(__builtins__, '__IPYTHON__'):
    print('IPython')
else:
    print('Nope')

Пока текущий принятый ответ работает в __main__ пространство имен, он не будет работать в пакете из-за __builtins__быть dict в других пространствах имен . Это должно работать в любом пространстве имен в python3:

      import builtins
getattr(builtins, "__IPYTHON__", False)
Другие вопросы по тегам