None
не поддерживает спецификаторы формата.Каждый тип объекта должен определить, как он хочет обрабатывать спецификаторы формата, и по умолчанию отклоняет их :
Метод __format__
самого object
сам вызываетОшибка типа, если передана любая непустая строка.
None
наследует это значение по умолчанию.
Вы, похоже, ожидаете, что None
будет обрабатывать спецификаторы формата так же, как строки,где '{:>6}'.format('None') == ' None'
.Это звучит так, как будто вы ожидаете, что все типы будут обрабатывать спецификаторы формата так, как это делают строки, или вы ожидаете, что поведение строки будет по умолчанию.Способ, которым строки обрабатывают спецификаторы формата, специфичен для строк;другие типы имеют свою собственную обработку.
Вы можете подумать, эй, почему %10s
тоже не терпит неудачу?Во-первых, s
запрашивает преобразование аргумента в строку с помощью str
перед любой дальнейшей обработкой.Во-вторых, вся обработка спецификаторов преобразования при форматировании строки в стиле printf выполняется с помощью str.__mod__
;он никогда не делегирует аргументы, чтобы выяснить, что означает спецификатор преобразования.