Как я могу выборочно избежать процентов (%) в строках Python?

У меня есть следующий код

test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test

print(selectiveEscape)

Я хотел бы получить результат:

Print percent % in sentence and not have it break.

Что на самом деле происходит:

    selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str

Ответ 1

>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.

Ответ 2

В качестве альтернативы, с Python 2.6 вы можете использовать новое форматирование строк (описано в PEP 3101):

'Print percent % in sentence and not {0}'.format(test)

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

Ответ 3

попробуйте использовать %% для печати знака%.

Ответ 4

Если шаблон форматирования был прочитан из файла, и вы не можете гарантировать, что контент удваивает знак процента, вам, вероятно, придется обнаруживать символ процента и решать программно, является ли это началом заполнителя или нет. Затем анализатор должен также распознавать последовательности, такие как %d (и другие буквы, которые могут быть использованы), но также %(xxx)s и т.д.

Аналогичную проблему можно наблюдать с новыми форматами - текст может содержать фигурные скобки.

Ответ 5

Вы не можете выборочно покинуть %, поскольку % всегда имеет особое значение в зависимости от следующего символа.

В документации на Python в нижней части второй таблицы в этом разделе говорится:

'%'        No argument is converted, results in a '%' character in the result.

Поэтому вы должны использовать:

selectiveEscape = "Print percent %% in sentence and not %s" % (test, )

(обратите внимание, что переменная expicit для кортежа как аргумент %)

Не зная об этом, я бы сделал:

selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)

со знанием, которое вы, очевидно, уже имели.