0

Ошибка форматирования текста: недопустимое выравнивание '=' в спецификаторе формата строки

10

Что означает выравнивание '=' в следующем сообщении об ошибке, и почему именно этот код вызывает её?

>>> "{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 ответ(ов)

0

str.__format__ не понимает, что делать с частью 03. Это работает только с числами:

>>> "{num:03}".format(num=1)
'001'

Если вам нужно дополнить строку нулями, вы можете использовать метод rjust:

>>> "1".rjust(3, "0")
'001'
0

В моем случае я пытался добавить нули в строку, а не в число.

Решение было простым: нужно было сначала преобразовать текст в число перед применением дополнения нулями:

num_as_text = '23'
num_as_num = int(num_as_text)
padded_text = f'{num_as_num:03}'
0

Вы пытаетесь вставить 'string->"1"', тогда как требуется float->3.44. Удалите кавычки вокруг числа "1", т.е. используйте num=1, и это сработает.

0

Для тех, кто искал в 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 к целому числу решило проблему.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь