gh-130662: accept leading zeros in precision/width for Fraction's formatting#130663
gh-130662: accept leading zeros in precision/width for Fraction's formatting#130663vstinner merged 5 commits into
Conversation
serhiy-storchaka
left a comment
There was a problem hiding this comment.
LGTM.
I have some minor suggestions for tests.
Sorry, something went wrong.
gvanrossum
left a comment
There was a problem hiding this comment.
Note that there's another inconsistency between float and Fraction.
x = 1/3
f"{x:_>010f}" # '__3.140000', ignores the zero-pad
x = Fraction(1, 3)
Traceback (most recent call last):
File "<python-input-4>", line 1, in <module>
f"{x:_>010f}"
^^^^^^^^^^
File "/Users/guido/cpython/Lib/fractions.py", line 600, in __format__
raise ValueError(
...<2 lines>...
)
ValueError: Invalid format specifier '_>010f' for object of type 'Fraction'So we still fail the goal of Fraction supporting everything that float does. Since Fraction actually is more strict (which is the way of the future) aren't we fixing this the wrong way?
Sorry, something went wrong.
|
Here is implementation pr, for context: #100161 The ValueError raised in case both alignment (and the fill character) and zero padding are specified on the ground "refuse the temptation to guess". In principle, it's not hard to reproduce float's behavior (zero padding is ignored if the fill character is specified). Though, maybe it's better to align this with the Fraction instead. Probably, it's a separate issue. Edit: #130716 Few another incompatibilities: #130664 |
Sorry, something went wrong.
|
As happens occasionally, the docs are out of sync with the implementation, and we should respond by updating the docs, not the code. IMO. |
Sorry, something went wrong.
|
The problem is that the stdlib has several beasts (Decimal and Fraction), that have slightly different implementations of new-style formatting. IMO, documenting all these differences will make documentation much less readable. Also, it's less obvious to which convention should follow external modules, like the mpmath or the gmpy2. |
Sorry, something went wrong.
|
Okay, I will leave it to more active core devs to sort out. |
Sorry, something went wrong.
vstinner
left a comment
There was a problem hiding this comment.
LGTM. I agree with @serhiy-storchaka: #130662 (comment)
Sorry, something went wrong.
Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
5bc2d99
into
python:main
Jun 2, 2025
|
Thanks @skirpichev for the PR, and @vstinner for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
Sorry, something went wrong.
…'s formatting (pythonGH-130663) (cherry picked from commit 5bc2d99) Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
|
Merged, thank you.
I disagree: we should not backport this change to stable branches. |
Sorry, something went wrong.
|
Wasn't it a fix for something we introduced in 3.14? @skirpichev |
Sorry, something went wrong.
No, Python 3.13 has the same behavior for example. It was "always" like that. @skirpichev proposed to have the behavior for all types: float, Fraction, Decimal. Before, only float accepted leading zeros. |
Sorry, something went wrong.
Why not? It's a bug, isn't? |
Sorry, something went wrong.
From my point of view, it's a new feature and existing projects may rely on the current (Python 3.14) behavior. |
Sorry, something went wrong.
How?! The issue is about formatting stdlib types (Fractions and Decimals, in a separate pr). Should external projects use current formatting specification mini-language or use more strict rules? This was coming from mpmath/mpmath#915. |
Sorry, something went wrong.
|
From my point of view, this is a borderline between a minor feature and an unsignificant bug fix which we may not want to backport. So maybe to 3.14 only? The solved problem is rather scholastic. |
Sorry, something went wrong.
|
Thanks @skirpichev for the PR, and @vstinner for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
Sorry, something went wrong.
…'s formatting (pythonGH-130663) (cherry picked from commit 5bc2d99) Co-authored-by: Sergey B Kirpichev <skirpichev@gmail.com> Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
…'s formatting (python#130663) Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
…'s formatting (python#130663) Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
…'s formatting (python#130663) Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
edited by bedevere-app
Bot
LoadingUh oh!
There was an error while loading. Please reload this page.
Copy link Copy MarkdownSorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.