19

GitHub - whittlbc/wat-py: Simple interactive breakpoint library with with automa...

 5 years ago
source link: https://github.com/whittlbc/wat-py
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

wat

Simple interactive breakpoint library with automatic variable injection, providing access to both local and global variables.

Better than print because you can actually interact with your variables.
Better than code.interact because you get both local and global variables.
Better than anything else because it's short and sweet, has no dependencies, and works with both Python 2 & 3.

Installation

$ pip install wat-py

Quickstart

from wat import wat

wat() # set interactive breakpoint

Usage

Set a breakpoint

Setting an interactive breakpoint is as easy as calling wat() from whatever line you want.

Example:

# Example app.py file
from wat import wat
import urllib

a = 1
b = 2


def do_something():
  a = 10
  c = 3
  wat()
  # more code-sauce


if __name__ == '__main__':
  do_something()

Running app.py will call the do_something function and pause code execution right after c is defined. An interactive console will appear, giving you access to all vars (both local and global) that do_something would otherwise have access to at the time of the breakpoint:

$ python app.py
(wat Interactive Console)
>>> a
10                          # local var overwrites global var
>>> b
2                           # global var
>>> c
3                           # local var
>>> urllib
<module 'urllib' from ...>  # imported module still available

Leave interactive console & proceed with code execution

Ctrl+D

Leave interactive console without executing any more code

exit()

Reason

The built-in code.interact method Python provides requires you to pass in the specific variables you want to have available in the interactive console, which gives you the option of passing in locals(), globals(), or manually creating a dict with the combination of both local and global vars (which no one wants to do every single time they want to set a breakpoint). I got sick of writing import code; code.interact(local=locals()) whenever I needed to set a breakpoint, realizing I needed some global vars from the import statements at the top of my file, and then having to manually re-import those global vars.

License

MIT


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK