如何在有条件的循环中调试Python模块函数?

时间:2019-05-23 17:19:57

标签: python loops debugging

我有一个名为functions_from_module的Python模块,以及一个我想调试的函数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 :(得分:0)

您也可以使用可选参数解决此问题:

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放入循环中是一个 bad 想法;您每次通过循环都会重新import;条件检查会留下难以追踪的结果。