Как я могу выполнить тест "if run from ipython" в Python?

Чтобы облегчить отладку с Ipython, я включаю следующее в начало моих скриптов

from IPython.Debugger import Tracer
debug = Tracer()

Однако, если я запустил свой script из командной строки с помощью

$ python myscript.py

Я получаю сообщение об ошибке, связанном с Ipython. Есть ли способ сделать следующее

if run_from_ipython():
    from IPython.Debugger import Tracer
    debug = Tracer()

Таким образом, я только импортирую функцию Tracer(), когда мне это нужно.

Ответ 1

Это, вероятно, то, что вы ищете:

def run_from_ipython():
    try:
        __IPYTHON__
        return True
    except NameError:
        return False

Ответ 2

Путь Python - использовать исключения. Как:

try:
    from IPython.Debugger import Tracer
    debug = Tracer()
except ImportError:
    pass # or set "debug" to something else or whatever

Ответ 3

Один способ, который лаконичен и хорошо работает с линтерами (то есть никаких жалоб на неопределенную переменную __IPYTHON__) - это

def in_ipython():
    return hasattr(globals()["__builtins__"], "__IPYTHON__")

Однако это займет примерно вдвое больше времени, чем решение Tom Dunham:

from timeit import timeit
timeit(in_ipython, number=100000)
> 0.026131024002097547
def toms_in_ipython():
    try:
        return __IPYTHON__
    except NameError:
        return False
timeit(toms_in_ipython, number=100000)
> 0.013109331019222736