birdseye is a Python debugger which records the values of expressions in a function call and lets you easily view them after the function exits. For example:
Rather than stepping through lines, move back and forth through loop iterations and see how the values of selected expressions change:
See which expressions raise exceptions, even if they’re suppressed:
Expand concrete data structures and objects to see their contents. Lengths and depths are limited to avoid an overload of data.
Calls are organised into functions (which are organised into files) and ordered by time, letting you see what happens at a glance:
Read more documentation here
birdseye can be used no matter how you write or run your code, requiring only a browser for the interface. But it's also integrated with some common tools for a smoother experience.