如何在没有中间体的情况下看到Python调试器中函数的返回值?

Chr*_*ris 13 python debugging

PDB(和其他Python调试器)有一种简单的方法来查看任何当前变量的值,只需输入它.但是,有时我使用的库不会将它们的返回值存储在中间变量中.

这是一个示例函数:

def do_stuff(*args, **kwds):
     return f(*args, **kwds)
Run Code Online (Sandbox Code Playgroud)

从f返回后,如何查看返回值?我下载它们后可以重写库以获得中间件:

def do_stuff(*args, **kwds):
     r = f(*args, **kwds)
     return r
Run Code Online (Sandbox Code Playgroud)

但似乎应该有更好的方法.

hyn*_*cer 18

您可以查看隐藏的__return__局部变量.

如果我忘记它的确切名称,我会通过以下方式探索它:

(Pdb) sorted(locals().keys())
['__return__', 'xyz', ...]
Run Code Online (Sandbox Code Playgroud)

编辑:我的相关后面的回答与__return__的例子

  • 我发现了一个pdb命令`retval`,但我认为如果返回值是一个无法详细打印的复杂对象,"__ return__"更通用,更有用. (2认同)

Kur*_*tal 6

在pdb中,当函数返回a时->'value',将在该行的末尾添加返回值的表示形式。

例如:

(Pdb) s
--Return--
> test.py(12)do_stuff()->'f'
-> return result
(Pdb) q
Run Code Online (Sandbox Code Playgroud)

意味着do_stuff()返回'f'