[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