У меня есть следующий код
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)
со знанием, которое вы, очевидно, уже имели.