Frank Millman schreef op 20/07/2022 om 13:04:
>> On Wed, 20 Jul 2022 at 18:34, Frank Millman <fr...@chagford.com> wrote:
>>>   >>>
>>>   >>> x = list(range(10))
>>>   >>>
>>>   >>> '{x[1]}'.format(**vars())
>>> '1'
>>>   >>>
>>>   >>> '{x[-1]}'.format(**vars())
>>> Traceback (most recent call last):
>>>     File "<stdin>", line 1, in <module>
>>> TypeError: list indices must be integers or slices, not str
>>>   >>>
>>>
>>> Can anyone explain this error? It seems that a negative index is deemed
>>> to be a string in this case.
>>>
>>
>> [...]
>>

"It seems to only want integer constants. x[2+2] and x[k] where k=2
don't work either.

I think the preferred style these days is f'{x[-1]}' which works."

Unfortunately the 'f' option does not work for me in this case, as I am
using a string object, not a string literal.

I've always found a bit dirty to pass indiscriminate symbol tables like the one from globals() or vars() or vars(some_object) to a formatting method, leaving the formatting string free to access any of it. I prefer to make things more explicit. Can't you make a dict with a selection of things you possible want to format?

In a sense I think you're looking for a more complete templating solution than what Python's formatting mechanisms are designed for. Maybe you should consider a full template engine, like Jinja?

--
"There is no cause so noble that it will not attract fuggheads."
        -- Larry Niven

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to