Как вы видите возвращаемое значение из функции в отладчике Python без промежуточного?

PDB (и другие отладчики Python) имеют простой способ просмотра значения любой текущей переменной, просто введя ее. Однако иногда я работаю с библиотеками, которые не сохраняют возвращаемые значения в промежуточных переменных.

Здесь примерная функция:

def do_stuff(*args, **kwds):
     return f(*args, **kwds)

После возврата из f, как я могу увидеть возвращаемое значение? Я могу переписать библиотеки после того, как я загрузил их, чтобы иметь промежуточное звено:

def do_stuff(*args, **kwds):
     r = f(*args, **kwds)
     return r

но кажется, что должен быть лучший способ.

Ответ 1

Вы можете посмотреть скрытую локальную переменную __return__.

Если я забуду это точное имя, я исследую его:

(Pdb) sorted(locals().keys())
['__return__', 'xyz', ...]

РЕДАКТИРОВАТЬ. Мой более поздний ответ с примером для __return__

Ответ 2

В pdb, когда функция возвращает, ->'value' добавляется в конце строки с представлением возвращаемого значения.

Например:

(Pdb) s
--Return--
> test.py(12)do_stuff()->'f'
-> return result
(Pdb) q

означает do_stuff() возвращенный 'f'

Ответ 3

Можете ли вы объяснить больше?

  • Отладчиком, вы имеете в виду, что используете регистратор? Вы переходите через среду IDE?
  • Что вы подразумеваете под "видеть возвращаемое значение"? Если вы просто хотите его распечатать...

    def do_stuff(*args, **kwds):
        result = f(*args, **kwds)
        print result
        return result