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