Ошибка форматирования текста: недопустимое выравнивание '=' в спецификаторе формата строки
Что означает выравнивание '='
в следующем сообщении об ошибке, и почему именно этот код вызывает её?
>>> "{num:03}".format(num="1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: '=' alignment not allowed in string format specifier
В коде есть тонкая проблема: входное значение "1"
является текстом, а не числом. Однако сообщение об ошибке, похоже, не связано с этим.
В сообщении об ошибке ничего не указывает на то, почему выравнивание '='
имеет значение, и это не упоминается в коде. Так в чем же смысл возникновения этого сообщения об ошибке?
4 ответ(ов)
str.__format__
не понимает, что делать с частью 03
. Это работает только с числами:
>>> "{num:03}".format(num=1)
'001'
Если вам нужно дополнить строку нулями, вы можете использовать метод rjust
:
>>> "1".rjust(3, "0")
'001'
В моем случае я пытался добавить нули в строку, а не в число.
Решение было простым: нужно было сначала преобразовать текст в число перед применением дополнения нулями:
num_as_text = '23'
num_as_num = int(num_as_text)
padded_text = f'{num_as_num:03}'
Вы пытаетесь вставить 'string->"1"', тогда как требуется float->3.44. Удалите кавычки вокруг числа "1", т.е. используйте num=1, и это сработает.
Для тех, кто искал в Google и наткнулся на этот вопрос и ответ.
Эта ошибка:
out_name = track_name_fmt.format(track, song)
ValueError: '=' alignment not allowed in string format specifier
Была исправлена следующим образом:
out_name = track_name_fmt.format(int(track), song)
Принудительное приведение track
к целому числу решило проблему.
Как экранировать фигурные скобки ({}) в строке при использовании .format?
Как заполнить строку в Python пробелами?
Использование locals() и метода format() для строк: есть ли подводные камни?
Форматирование строк против конкатенации
Как изменить порядок столбцов в DataFrame?