【发布时间】:2018-05-27 03:02:54
【问题描述】:
我有一个很大的遗留 Python 方法,其中包含大约 20 个 return 语句。
该方法不应返回None,但它确实如此。它可以在一个简单的测试用例中重复。
到目前为止,我使用调试器并逐行遍历代码以找到匹配的返回语句。
但是有没有更简单的方法?
有没有办法在方法返回 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
上面是一个简单的代码sn-p。结果:
Traceback (most recent call last):
File "/home/modwork_vums_d/src/manyreturns.py", line 8, in <module>
assert not big_method(True, None) is None
AssertionError
上面的回溯并没有太大帮助,因为我想看到 inside big_method() 这一行。在上面的例子中,我想看看我用<------标记的。
我使用 PyCharm,但欢迎使用纯 python 或其他解决方案。
只是为了记录。有一个后续问题试图在 PyCharm 中启用此功能:PyCharm: Debugging: r(eturn) Continue execution until the current function returns
【问题讨论】:
-
有一个可能的解决方案:stackoverflow.com/a/1156048/5588279.
-
我想知道这是否可行,执行 big_method 的框架已经被回收了。
-
也许你可以利用解释器的跟踪函数,记录被调用函数的执行路径,然后在外部断言失败时打印出来。
-
但是当您使用调试器时,我想它应该具有“运行直到当前函数返回”之类的功能,它将在您需要的行处停止。
-
@guettli link of pdb
rcommand doc