Режим отладки и запуска в Jupyter

Как и в matlab, есть ли в Jupyter возможность запускать функцию в режиме отладки, где выполнение приостанавливается в точках останова, а в режиме запуска функция игнорирует точки останова? В простом примере, как

from IPython.core.debugger import set_trace

def debug(y):
    x = 10
    x = x + y 
    set_trace()
    for i in range(10):
        x = x+i
    return x

debug(10)

Возможно ли, что мы вызываем функцию так, что set_trace игнорируется и функция выполняется нормально?

Причина, по которой я хочу это сделать, состоит в том, что в моей функции я поместил много установленных трасс, и когда я просто хочу работать без трасс, мне нужно прокомментировать все установленные трассы. Есть ли более простой способ?

1 ответ

Решение

Я не знаю, как вы можете сделать это напрямую с Jupyter, но то, что вы могли бы сделать, это патч обезьяны set_trace() таким образом (я бы порекомендовал поместить это в собственную ячейку, чтобы вы могли перезапустить его, когда вы захотите снова включить отладку):

from IPython.core.debugger import set_trace
debug_mode = False #switch this to True if you want debugging back on
if not debug_mode:
  def pass_func():
    pass
  set_trace = pass_func

Что это делает, это привязать имя set_trace быть функцией, которая просто ничего не делает, поэтому каждый раз set_trace() называется, это будет просто pass,

Если вы хотите снова включить отладку, просто переключите debug_mode флаг для True и снова запустить камеру. Это затем перепривязать имя set_trace быть set_trace импортировано из IPython.core.debugger,

Другие вопросы по тегам