[Python-Dev] Easier debugging with f-strings (original) (raw)
Eric V. Smith eric at trueblade.com
Mon May 6 20:39:41 EDT 2019
- Previous message (by thread): [Python-Dev] Stable ABI or not for PyTypeObject?
- Next message (by thread): [Python-Dev] Easier debugging with f-strings
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Last fall Larry Hastings made a suggestion for adding a way to make so-called "print-based debugging" easier with f-strings. Basically the approach is that f-strings would be able to produce the text of the expression and the value of that expression, without repeating the expression in the f-sting. No more writing f'foo={foo}, bar={bar}'. foo and bar should each only be in there once each!
At PyCon US 2019 I did a lightning talk about this, suggesting the syntax of !d, so that if foo="Hello", then f"{foo!d}" would produce "foo='Hello'". That is, it's the text of the expression, followed by an equal sign, followed by the repr of the expression. I have implemented this and a PR exists. Arbitrary expressions are allowed. I heard from core devs and end users after this talk, and all were positive.
After that lightning talk, Larry and I talked about it some more, and for a number of reasons decided that it would make more sense if the syntax used an = sign. So we came up with f"{foo=}", which would also produce "foo='Hello'".
The reasons for the change are:
- Having '=' in the expression is a better mnemonic than !d.
- By not using a conversion starting with !, we can compose = with the existing ! conversions, !r, !s, and the rarely used !a.
- We can let the user have a little more control of the resulting string.
Another thing I like about this approach over !d is that the patch is simpler, because there are fewer special cases. And because there are fewer special cases in the code, I think the proposal is easier to explain than !d (in particular how it interacts (or doesn't!) with format specifiers).
There's a good rationale here, along with a PR: https://bugs.python.org/issue36817.
My plan is to commit this change before 3.8b1. If anyone would like to discuss it at PyCon, I'll be around until about 10:30 am on Tuesday. I'll be in the CPython sprint room, and I'll be watching bpo, too.
Eric
- Previous message (by thread): [Python-Dev] Stable ABI or not for PyTypeObject?
- Next message (by thread): [Python-Dev] Easier debugging with f-strings
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]