Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调试,其中方法返回None_Python_Debugging_Pycharm - Fatal编程技术网

Python 调试,其中方法返回None

Python 调试,其中方法返回None,python,debugging,pycharm,Python,Debugging,Pycharm,我有一个大型的传统Python方法,它包含大约20条return语句 该方法不应返回None,但它会返回。它可以在一个简单的测试用例中重复 到目前为止,我使用了一个调试器并逐行遍历代码以找到匹配的return语句 但是有更简单的方法吗 有没有一种方法可以在方法返回None时立即引发异常 当然,我需要看到包含return语句的行 例如: def big_method(arg1, some_var): #.... many returns if arg1: retur

我有一个大型的传统Python方法,它包含大约20条
return
语句

该方法不应返回
None
,但它会返回。它可以在一个简单的测试用例中重复

到目前为止,我使用了一个调试器并逐行遍历代码以找到匹配的return语句

但是有更简单的方法吗

有没有一种方法可以在方法返回None时立即引发异常

当然,我需要看到包含return语句的行

例如:

def big_method(arg1, some_var):
    #.... many returns
    if arg1:
        return some_var # <------
    #... many returns


assert not big_method(True, None) is None
def big_方法(arg1,一些变量):
#.... 许多回报
如果arg1:
返回一些变量,pdb有一个
r(eturn)
命令用于此需要:

r(eturn) 继续执行,直到当前函数返回

例如:

> /Users/georgexsh/wasteland/tmp/app.py(6)<module>()
-> assert not big_method(True, None) is None
(Pdb) s
--Call--
> /Users/georgexsh/wasteland/tmp/app.py(1)big_method()
-> def big_method(arg1, some_var):
(Pdb) r
--Return--
> /Users/georgexsh/wasteland/tmp/app.py(3)big_method()->None
-> return some_var
/Users/georgexsh/wasteland/tmp/app.py(6)()
->assert not big_方法(True,None)为None
(Pdb)s
--召唤--
>/Users/georgexsh/wasteland/tmp/app.py(1)big_method()
->def big_方法(arg1,一些变量):
(Pdb)r
--返回--
>/Users/georgexsh/wasteland/tmp/app.py(3)big_method()->None
->返回一些变量

请参阅中的详细信息。

有一种可能的解决方案:。我想知道这是否可能,执行big_方法的帧已被回收。也许您可以利用解释器的跟踪函数,记录被调用函数的执行路径,然后在外部断言失败时打印出来。但是,由于您正在使用调试器,我想它应该有一个类似“运行直到当前函数返回”的功能,它将在您需要的行停止。@guettli
> /Users/georgexsh/wasteland/tmp/app.py(6)<module>()
-> assert not big_method(True, None) is None
(Pdb) s
--Call--
> /Users/georgexsh/wasteland/tmp/app.py(1)big_method()
-> def big_method(arg1, some_var):
(Pdb) r
--Return--
> /Users/georgexsh/wasteland/tmp/app.py(3)big_method()->None
-> return some_var