debugging – Python: Print a variables name and value?

debugging – Python: Print a variables name and value?

Python 3.8 f-string = syntax

It has arrived!

#!/usr/bin/env python3
foo = 1
bar = 2
print(f{foo=} {bar=})


foo=1 bar=2 

Added in commit Add f-string debugging using =. which documents:

f-strings now support =  for quick and easy debugging

Add ``=`` specifier to f-strings. ``f{expr=}`` expands
to the text of the expression, an equal sign, then the repr of the
evaluated expression.  So::

  x = 3
  print(f{x*9 + 15=})

Would print ``x*9 + 15=42``.

so it also works for arbitrary expressions. Nice!

The dream: JavaScript-like dict keys from variable names

I find Python better than JavaScript in almost every sense, but Ive grown to really like this JavaScript feature:

let abc = 1
let def = 2
console.log({abc, def})

works in JavaScript because {abc, def} expands to {abc: 1, def: 2}. This is just awesome, and gets used a lot in other places of the code besides logging.

Not possible nicely in Python currently except with locals: Python variables as keys to dict

You can just use eval:

def debug(variable):
    print variable, =, repr(eval(variable))

Or more generally (which actually works in the context of the calling function and doesnt break on debug(variable), but only on CPython):

from __future__ import print_function

import sys

def debug(expression):
    frame = sys._getframe(1)

    print(expression, =, repr(eval(expression, frame.f_globals, frame.f_locals)))

And you can do:

>>> x = 1
>>> debug(x + 1)
x + 1 = 2

debugging – Python: Print a variables name and value?

Use the latest f{var = } feature in Python3.8 for example:

>>> a = hello
>>> print(f{a = })
a = hello

Leave a Reply

Your email address will not be published. Required fields are marked *