Ответ 1
Это, вероятно, то, что вы ищете:
def run_from_ipython():
try:
__IPYTHON__
return True
except NameError:
return False
Чтобы облегчить отладку с 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(), когда мне это нужно.
Это, вероятно, то, что вы ищете:
def run_from_ipython():
try:
__IPYTHON__
return True
except NameError:
return False
Путь Python - использовать исключения. Как:
try:
from IPython.Debugger import Tracer
debug = Tracer()
except ImportError:
pass # or set "debug" to something else or whatever
Один способ, который лаконичен и хорошо работает с линтерами (то есть никаких жалоб на неопределенную переменную __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