Строковое форматирование Python, когда строка содержит “%s” без выхода

При форматировании строки моя строка может содержать модуль "%" то, что я не хочу преобразовать. Я могу выйти из строки и изменить каждого "%" кому: "%%" как обходное решение.

например,

'Day old bread, 50%% sale %s' % 'today!'  

вывод:

'Day old bread, 50% sale today'

Но есть ли какие-либо альтернативы выходу? Я надеялся, что использование dict сделает его так, Python проигнорировал бы любые преобразования неключевого слова.
например,

'Day old bread, 50% sale %(when)s' % {'when': 'today'}  

но Python все еще видит первый модуль % и дает a:

TypeError: not enough arguments for format string
17
задан sobolevn 4 June 2015 в 05:46
поделиться

3 ответа

Вы можете (и должны) использовать новую строку .format () метод (если у вас есть Python 2.6 или выше):

"Day old bread, 50% sale {0}".format("today")

Руководство можно найти здесь .

В документации также говорится, что старое форматирование % в конечном итоге будет удалено с языка, хотя это, безусловно, займет некоторое время. Новые методы форматирования намного мощнее, так что это хорошо.

23
ответ дан 30 November 2019 в 12:43
поделиться

Преобразование «%» в «%%» не является временным решением. Если вы используете форматирование строки, это способ представления знака «%». Если вы этого не хотите, вы всегда можете сделать что-нибудь вроде:

print "Day old bread, 50% sale " + "today"

например. без форматирования.

Обратите внимание, что при использовании конкатенации строк убедитесь, что переменная является строкой (а не, например, None), или используйте str (varName) . В противном случае вы получите что-то вроде «Невозможно объединить str и NoneType».

2
ответ дан 30 November 2019 в 12:43
поделиться

Не совсем так - экранирование знаков % - это плата за использование форматирования строк. Вместо этого можно использовать конкатенацию строк: 'Day old bread, 50% sale ' + whichday, если это поможет...

2
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: