Am 29.01.23 um 05:27 schrieb Thomas Passin:

Well, yes, we do see that.  What we don't see is what you want to accomplish by doing it, and why you don't seem willing to accept some restrictions on the string fragments so that they will evaluate correctly.

I'll have to accept the restrictions. That's a good enough answer for me, actually. I was just thinking that possibly there's something like (made-up code):

x = { "foo": "bar" }
fstr = string.fstring_compile(s)
fstr.eval(x = x)

Which I didn't know about. It would make sense to me, but possibly not enough of a usecase to make it into Python. The format() flavors do not

IOW, perhaps there is a more practical way to accomplish what you want. Except that we don't know what that is.

Well, I don't know. I pretty much want a generic Python mechanism that allows for exactly what f-strings do: execute arbitrary Python snippets of code and format them in one go. In other words, I want to be able to do things like that, given an *arbitrary* dictionary x and a string s (which has the only restriction that its content needs to be vald f-string grammar):

x = {
        "d": 12,
        "t": 12345,
        "dt": datetime.datetime,
        "td": datetime.timedelta
}
s = "{x['d']:09b} {'->' * (x['d'] // 3)} {(x['dt'](2000, 1, x['d']) + x['td'](120)).strftime('%y.%m.%d')} {'<-' * (x['d'] // 4)}"
q = magic_function(s, x = x)

and have "q" then be

'000001100 ->->->-> 00.05.11 <-<-<-'

I believe the closest solution would be using a templating mechanism (like Mako), but that has slightly different syntax and doesn't do string formatting as nice as f-strings do. f-strings really are the perfect syntax for what I want to do.

Cheers,
Johannes
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to