Как отладить функцию модуля Python, условную в цикле, который ее вызывает? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть модуль Python под названием functions_from_module, с функцией function_inside_module, которую я хотел бы отладить.В моем приложении function_inside_module используется для обработки некоторых данных, которые запускаются в цикле.Тем не менее, одна точка данных вызывает у меня проблемы, поэтому я хочу остановить цикл специально и посмотреть, что делает модуль.

Я не должен гуглить правильную вещь;Я также попытался объявить циклические переменные глобальными, потому что я думаю, что это как-то связано с тем, что глобальные переменные недоступны в области действия функции, но, похоже, это не сработало.

Вот модуль:

#filename is functions_from_module.py
def function_inside_module():
    print("Before debug")
    #if i > 3 #I want to do something like this
    import pdb; pdb.set_trace()
    print("After debug")

и основной скрипт:

#filename is main_script.py
from functions_from_module import function_inside_module
#for i in range(5): #I want to do something like this
function_inside_module()

Для выполнения я запускаю python main_script.py в командной строке.

Если строки, которые я хочу запустить, не закомментированы (и справа указаны отступы), то возвращается NameError: имя 'i' не определено.

Обходной путь, который я использовал, состоит в том, чтобы переопределить function_inside_module для получения аргумента i, но мне это кажется грязным.

1 Ответ

0 голосов
/ 23 мая 2019

Вы также можете обойти это с помощью необязательного параметра:

import pdb

def function_inside_module(i=None):
    print("Before debug")
    if i > 3:  # Debugging trace only
        pdb.set_trace()
    print("After debug")

--------------------

from functions_from_module import function_inside_module
for i in range(5):
    function_inside_module(i)

Теперь вы можете забыть удалить i из функции;по умолчанию он будет None.

. Кроме того, операторы import находятся в верхней части модуля, а не в середине.Помещение import в цикл - это плохая идея;вы повторяете import каждый раз через цикл;условная проверка оставляет результаты, которые трудно отследить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...