Вырезание строки из отформатированной строки дает 'TypeError: строковые индексы должны быть целыми числами' - PullRequest
3 голосов
/ 25 апреля 2019

Разве обе эти команды не должны делать одно и то же?

>>> "{0[0:5]}".format("lorem ipsum")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers
>>> "{0}".format("lorem ipsum"[0:5])
'lorem'

Команды

>>> "{0[0]}".format("lorem ipsum")
'l'

и

>>> "{0}".format("lorem ipsum"[0])
'l'

оценивают одинаково,(Я знаю, что могу использовать другие методы для этого, мне просто любопытно, почему это не работает)

1 Ответ

1 голос
/ 25 апреля 2019

Синтаксис str.format обрабатывается библиотекой и поддерживает только несколько синтаксисов «выражений», которые не совпадают с обычным синтаксисом Python.Например,

"{0[foo]}".format(dict(foo=2))  # "2"

работает без кавычек вокруг ключа словаря.Конечно, из этой простоты есть ограничения , например, невозможность ссылаться на ключ с ] или интерпретировать фрагмент, как в вашем примере.

Примечаниечто f-строки, упомянутые kendall, обрабатываются компилятором и (соответственно) используют (почти) синтаксис неограниченного выражения .Им нужна эта сила, поскольку у них нет очевидной альтернативы размещения этих выражений в списке аргументов на format.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...