[Tim]
> Note that transforming
>
> {EXPR!d:FMT}
>
> into
>
> EXPR={repr(EXPR):FMT}
>
> is actually slightly more involved than transforming it into
>
> EXPR={EXPR:FMT}
>
> so I don't buy the argument that the original idea is simpler. More
> magical and less useful, yes ;-)
[Eric V. Smith]
Actually, my proposal is to apply FMT to the entire result of
EXPR={repr(EXPR)}, not just the repr(EXPR) part. I'm not sure either is
particularly useful.
I think I’ve come around to Tim’s way of thinking on this. If the format spec is basically useless (which I think it would be if it applied to either the whole string or to the repr of the value), then what’s the point of allowing it? I also want the 90% case to be addressed by just plain repr.
I did consider (and implement) a version that prohibited format specs, but it seemed wrong to remove a feature that might have some clear use.
So, my compromise is:
- f"{expr!d}" expands to f"expr={repr(expr)}", but
- f"{expr!d:spec} expands to f"expr={format(expr, spec)}"
There’s some more discussion here:
As Paul Moore says on that issue, this is explained as: use repr, unless you specify a format spec, then use format.
BTW, I checked, and I've never used !r, !s, or !a. So the idea that the format could apply to a string - when EXPR itself doesn't evaluate to a string - is simply foreign to me. I suppose it's natural to people who do use ![rsa] all the time - if such people exist ;-)
Especially when debugging and logging, I use !r all the time.
Eric