Подтвердить что ты не робот

Почему символ "{" остается, когда f "\ {10}" оценивается в Python 3.6?

f-string - одна из новых функций в Python 3.6.

Но когда я пробую это:

>>> f"\{10}"
'\\{10'

Я не могу понять, почему левая фигурная скобка '{' остается в результате. Я предположил, что результат должен быть таким же с str.format:

>>> "\{}".format(10)
'\\10'

В PEP-0498 он не отвечает на это явно. Итак, что приводит к тому, что левая фигурная скобка '{' останется в результате и что вызывает эту разницу между f-string и str.format()?

4b9b3361

Ответ 1

Это ошибка. Подход, который в настоящее время работает, заключается в использовании литерала Unicode \u005c для \ вместо этого:

>>> f'\u005c{10}'
'\\10'

или, с аналогичным эффектом, используя raw f -string:

>>> rf'\{10}'
'\\10'

Используя '\', кажется, что две странные вещи происходят одновременно:

  • Следующий символ ('{' здесь) был экранирован, оставив его в результирующей строке.
  • Отформатированная строка также оценивается, что является нечетным и не ожидается

Пример:

>>> f'\{2+3}'
'\\{5'
>>> a = 20
>>> f'\{a+30}'
'\\{50'

В любом случае, я скоро напишу отчет об ошибке (так как вижу, что у вас его еще нет) и обновляется, когда я получаю ответ.

Обновление: Создано Проблема 29104 - Левая скобка остается в формате строки, когда "\" претворяет ее, если вам интересно, Посмотрите на беседу.

Обновление 2: проблема устранена с помощью PR 490.