[New-bugs-announce] [issue39486] bug in %-formatting in Python, related to escaped %-characters

Carl Friedrich Bolz-Tereick report at bugs.python.org
Wed Jan 29 09:49:09 EST 2020


New submission from Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>:

The following behaviour of %-formatting changed between Python3.6 and Python3.7, and is in my opinion a bug that was introduced.

So far, it has been possible to add conversion flags to a conversion specifier in %-formatting, even if the conversion is '%' (meaning a literal % is emitted and no argument consumed).

Eg this works in Python3.6:

>>>> "%+%abc% %" % ()
'%abc%'

The conversion flags '+' and ' ' are ignored.

Was it discussed and documented anywhere that this is now an error? Because Python3.7 has the following strange behaviour instead:

>>> "%+%abc% %" % ()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not enough arguments for format string

That error message is just confusing, because the amount of arguments is not the problem here. If I pass a dict (thus making the number of arguments irrelevant) I get instead:

>>> "%+%abc% %" % {}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: unsupported format character '%' (0x25) at index 2

(also a confusing message, because '%' is a perfectly fine format character)

In my opinion this behaviour should either be reverted to how Python3.6 worked, or the new restrictions should be documented and the error messages improved.

----------
messages: 360965
nosy: Carl.Friedrich.Bolz
priority: normal
severity: normal
status: open
title: bug in %-formatting in Python, related to escaped %-characters
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue39486>
_______________________________________


More information about the New-bugs-announce mailing list