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

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

 >>> "{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" – это текст, а не номер. Но сообщение об ошибке, похоже, не имеет к этому никакого отношения.

Ничто в сообщении об ошибке не указывает, почему «= выравнивание» имеет значение, и оно не отображается в коде. Итак, каково значение испускания этого сообщения об ошибке?

5 Solutions collect form web for “Ошибка форматирования текста: выравнивание '=' не допускается в спецификаторе формата строки”

Сообщение об ошибке возникает, потому что '=' alignment подразумевается спецификатором формата.

str.format мини-языка формата str.format определил спецификатор выравнивания «=», потому что:

Предшествующее поле ширины на ноль ('0') символ позволяет значить нулевое заполнение для числовых типов. Это эквивалентно символу заполнения '0' с типом выравнивания '='.

Таким образом, указывая 0N как «нулевое дополнение к ширине N», вы подразумеваете, что «ввод является числовым типом», и «нули должны идти между знаком и цифрами». Последнее последствие подразумевает '=' alignment .

Поскольку значение "1" не является числовым, код обработки выравнивания «=» повышает это исключение. Сообщение написано в ожидании, что вы знаете, о чем идет речь, потому что вы запросили (по смыслу) выравнивание «=».

Да, я думаю, что сообщение об ошибке должно быть улучшено. Я поднял вопрос для этого .

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

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

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

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

Обходной путь заключается в использовании дополнения '>' (правое выравнивание), которое имеет синтаксис:

 [[fill]align][width] 

с выравниванием > и заполнением 0 .

Заполните значения по умолчанию пробелом .

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

Проблема заключалась в том, что выравнивание по умолчанию равно = что означает

Заставляет отступы помещаться после знака (если есть), но перед цифрами. Это используется для печати полей в форме «+000000120». Этот параметр выравнивания действителен только для числовых типов. Он становится значением по умолчанию, когда «0» сразу предшествует ширине поля.

Источник (документы Python 3)

В строке нет знака. Вы также можете указать выравнивание вручную и использовать синтаксис:

 [align]0[width] 
 >>> "{num:>03}".format(num="1") '001' 

Также обратите внимание:

 >>> "{num:^03} {num:<03}".format(num="1") '010 100' 

который работает с одной и той же логикой, но для выравнивания слева выравнивание ( < ) и центра ( ^ )

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

Этот формат был бы приемлемым

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

но то, как у вас есть указатель, указанный {num:03} – нет. Это интересный ValueError, хотя, если вы удалите : интересная ошибка заменяется стандартным KeyError .

  • Как мне преобразовать дату и время python в строку с датой чтения?
  • Pythons много способов форматирования строк - являются ли старые (будут) устаревшими?
  • Почему Python не может помещаться в string.format с "\ x00"?
  • string.format () с необязательными заполнителями
  • Форматирование строки Python, когда строка содержит «% s» без экранирования
  • Форматирование чисел в строки в Python
  • Могу ли я повторить дескриптор строкового формата в python?
  • Форматирование даты и времени в строку с миллисекундами
  • Форматирование строки Python: несколько ссылок на один аргумент
  • Динамически вычисленное нулевое заполнение в строке формата в python
  • Что означает «h» в строке формата python?
  •  
    Interesting Posts for Van-Lav

    conda удалить openssl breaks iPython, conda и pip

    В возвышенном, почему def run работает в одном случае, а не в другом случае, и как я могу заставить его работать?

    ggsave () в ggplot для python, не сохраняющего

    Переименование Python – получение значения перечисления при преобразовании строк

    Зачем импортировать urlfetch из Google App Engine?

    В python – оператор, который набор использует для проверки, если объект находится в наборе

    странная утечка памяти с помощью python + paramiko

    Альтернатива shlex для Python для C / C ++

    Использование OAuth для аутентификации пользователей Office 365 / Graph с помощью Django

    Есть ли простая инфраструктура сокращения каркаса Python, которая использует обычную файловую систему?

    Автоматизация Windows Media Player

    Ошибка кодирования Django Python, символ не-ASCII '\ xe5'

    Как выполнить логическую операцию и логическую индексацию с помощью VIPS в Python?

    Python проверяет, работает ли процесс или нет.

    режущие массивы в numpy / scipy

    Python - лучший язык программирования в мире.