Issue 27772: Refer to actual format string when creating “zero padding” error message (original) (raw)
When using a format specifier with leading zero, the format spec mini-language (as documented at https://docs.python.org/3/library/string.html#format-specification-mini-language>) says:
'=' […] becomes the default when ‘0’ immediately precedes the field width.
When the ‘=’ option is only implied, the error message “ValueError: '=' alignment not allowed in string format specifier” becomes surprising and incomprehensible to someone who does not know that implied behaviour.
In issue 15560, Terry Reedy says:
If the spec string is still available, it could be searched and the message adjusted if '=' is not present. That proposal should be a new issue if someone wants to push it.
This issue raises that proposal.
The error message should be changed so that:
- It makes sense whether or not the ‘=’ option is explicit in the format specifier.
Or:
- Different messages are produced when the ‘=’ option is explicit versus when it is implicit.
I think the former option is better, but either will satisfy this request.
PR 11270 fixes this issue by making such format valid. Preceding the width field by '0' no longer affects the default alignment for strings, i.e. no longer sets the alignment to invalid '=' if it is not specified explicitly.
format('abc', '<8') 'abc ' format('abc', '8') 'abc ' format('abc', '<08') 'abc00000' format('abc', '08') 'abc00000'
This does not contradict the documentation, which specifies this case for numeric types, but not for strings.