【问题标题】:Debug where method returns None调试方法返回无的地方
【发布时间】: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() 这一行。在上面的例子中,我想看看我用&lt;------标记的。

我使用 PyCharm,但欢迎使用纯 python 或其他解决方案。

只是为了记录。有一个后续问题试图在 PyCharm 中启用此功能:PyCharm: Debugging: r(eturn) Continue execution until the current function returns

【问题讨论】:

  • 有一个可能的解决方案:stackoverflow.com/a/1156048/5588279.
  • 我想知道这是否可行,执行 big_method 的框架已经被回收了。
  • 也许你可以利用解释器的跟踪函数,记录被调用函数的执行路径,然后在外部断言失败时打印出来。
  • 但是当您使用调试器时,我想它应该具有“运行直到当前函数返回”之类的功能,它将在您需要的行处停止。

标签: python debugging pycharm


【解决方案1】:

pdb 有一个r(eturn) 命令来满足这个需求:

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

示例:

> /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

pdb doc中查看更多详细信息。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多