mirror of
https://github.com/python/cpython.git
synced 2025-10-07 15:42:02 +00:00
bpo-27772: Make preceding width with 0 valid in string format. (GH-11270)
Previously it was an error with confusing error message.
This commit is contained in:
parent
8dfe15625e
commit
cf19cc3b92
4 changed files with 15 additions and 3 deletions
|
@ -347,8 +347,8 @@ The meaning of the various alignment options is as follows:
|
||||||
| ``'='`` | Forces the padding to be placed after the sign (if any) |
|
| ``'='`` | Forces the padding to be placed after the sign (if any) |
|
||||||
| | but before the digits. This is used for printing fields |
|
| | but before the digits. This is used for printing fields |
|
||||||
| | in the form '+000000120'. This alignment option is only |
|
| | in the form '+000000120'. This alignment option is only |
|
||||||
| | valid for numeric types. It becomes the default when '0'|
|
| | valid for numeric types. It becomes the default for |
|
||||||
| | immediately precedes the field width. |
|
| | numbers when '0' immediately precedes the field width. |
|
||||||
+---------+----------------------------------------------------------+
|
+---------+----------------------------------------------------------+
|
||||||
| ``'^'`` | Forces the field to be centered within the available |
|
| ``'^'`` | Forces the field to be centered within the available |
|
||||||
| | space. |
|
| | space. |
|
||||||
|
@ -424,6 +424,10 @@ When no explicit alignment is given, preceding the *width* field by a zero
|
||||||
sign-aware zero-padding for numeric types. This is equivalent to a *fill*
|
sign-aware zero-padding for numeric types. This is equivalent to a *fill*
|
||||||
character of ``'0'`` with an *alignment* type of ``'='``.
|
character of ``'0'`` with an *alignment* type of ``'='``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
Preceding the *width* field by ``'0'`` no longer affects the default
|
||||||
|
alignment for strings.
|
||||||
|
|
||||||
The *precision* is a decimal number indicating how many digits should be
|
The *precision* is a decimal number indicating how many digits should be
|
||||||
displayed after the decimal point for a floating point value formatted with
|
displayed after the decimal point for a floating point value formatted with
|
||||||
``'f'`` and ``'F'``, or before and after the decimal point for a floating point
|
``'f'`` and ``'F'``, or before and after the decimal point for a floating point
|
||||||
|
|
|
@ -1098,6 +1098,12 @@ class UnicodeTest(string_tests.CommonTest,
|
||||||
self.assertEqual('{0:^8s}'.format('result'), ' result ')
|
self.assertEqual('{0:^8s}'.format('result'), ' result ')
|
||||||
self.assertEqual('{0:^9s}'.format('result'), ' result ')
|
self.assertEqual('{0:^9s}'.format('result'), ' result ')
|
||||||
self.assertEqual('{0:^10s}'.format('result'), ' result ')
|
self.assertEqual('{0:^10s}'.format('result'), ' result ')
|
||||||
|
self.assertEqual('{0:8s}'.format('result'), 'result ')
|
||||||
|
self.assertEqual('{0:0s}'.format('result'), 'result')
|
||||||
|
self.assertEqual('{0:08s}'.format('result'), 'result00')
|
||||||
|
self.assertEqual('{0:<08s}'.format('result'), 'result00')
|
||||||
|
self.assertEqual('{0:>08s}'.format('result'), '00result')
|
||||||
|
self.assertEqual('{0:^08s}'.format('result'), '0result0')
|
||||||
self.assertEqual('{0:10000}'.format('a'), 'a' + ' ' * 9999)
|
self.assertEqual('{0:10000}'.format('a'), 'a' + ' ' * 9999)
|
||||||
self.assertEqual('{0:10000}'.format(''), ' ' * 10000)
|
self.assertEqual('{0:10000}'.format(''), ' ' * 10000)
|
||||||
self.assertEqual('{0:10000000}'.format(''), ' ' * 10000000)
|
self.assertEqual('{0:10000000}'.format(''), ' ' * 10000000)
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
In string formatting, preceding the *width* field by ``'0'`` no longer
|
||||||
|
affects the default alignment for strings.
|
|
@ -219,7 +219,7 @@ parse_internal_render_format_spec(PyObject *format_spec,
|
||||||
/* The special case for 0-padding (backwards compat) */
|
/* The special case for 0-padding (backwards compat) */
|
||||||
if (!fill_char_specified && end-pos >= 1 && READ_spec(pos) == '0') {
|
if (!fill_char_specified && end-pos >= 1 && READ_spec(pos) == '0') {
|
||||||
format->fill_char = '0';
|
format->fill_char = '0';
|
||||||
if (!align_specified) {
|
if (!align_specified && default_align == '>') {
|
||||||
format->align = '=';
|
format->align = '=';
|
||||||
}
|
}
|
||||||
++pos;
|
++pos;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue