[Python-Dev] The syntax of replacement fields in format strings

Guido van Rossum guido at python.org
Tue Oct 31 11:41:28 EDT 2017


I'd say let sleeping dogs lie.

On Tue, Oct 31, 2017 at 3:52 AM, Eric V. Smith <eric at trueblade.com> wrote:

> If I had it to do over again, I’d implement it more strictly and only
> allow chars that are valid in identifiers.
>
> But see https://bugs.python.org/issue31907 for a case that is currently
> valid and would break if we changed how it worked.
>
> I’m not sure it’s worth the churn of deprecating this and eventually
> making it illegal.
>
> --
> Eric.
>
> On Oct 31, 2017, at 6:37 AM, Serhiy Storchaka <storchaka at gmail.com> wrote:
>
> According to the specification of format string syntax [1] (I meant
> str.format(), not f-strings), both argument name and attribute name must be
> Python identifiers.
>
> But the current implementation is more lenient and allow arbitrary
> sequences of characters while they don't contain '.', '[', ']', '{', '}',
> ':', '!'.
>
> >>> '{#}'.format_map({'#': 42})
> '42'
> >>> import types
> >>> '{0.#}'.format(types.SimpleNamespace(**{'#': 42}))
> '42'
>
> This can be confusing due to similarity with the format string syntaxes in
> str.format() and f-strings.
>
> >> name = 'abc'
> >>> f'{name.upper()}'
> 'ABC'
> >>> '{name.upper()}'.format(name='abc')
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> AttributeError: 'str' object has no attribute 'upper()'
>
> If accept only identifiers, we could produce more specific error message.
>
> Is there a bug in the documentation or in the implementation?
>
> [1] https://docs.python.org/3/library/string.html#format-string-syntax
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/
> eric%2Ba-python-dev%40trueblade.com
>
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/
> guido%40python.org
>
>


-- 
--Guido van Rossum (python.org/~guido)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20171031/33631ab9/attachment.html>


More information about the Python-Dev mailing list