私は以下のコードを持っています
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
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
あるいは、Python 2.6以降、新しい文字列フォーマットを使うことができます( PEP 3101 で説明されています):
'Print percent % in sentence and not {0}'.format(test)
文字列が複雑になるので、これは特に便利です。
%記号を印刷するために%%
を使ってみてください。
%
は常に次の文字によって特別な意味を持つため、%
を選択的にエスケープすることはできません。
Pythonの ドキュメンテーション では、そのセクションの2番目のテーブルの一番下に、次のように述べています。
'%' No argument is converted, results in a '%' character in the result.
したがって、あなたは使うべきです:
selectiveEscape = "Print percent %% in sentence and not %s" % (test, )
(%
の引数としてTupleへの有効期限の変更に注意してください)
上記のことを知らなくても、私はしたはずです。
selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)
あなたが明らかにすでに持っていた知識を使って。
フォーマットテンプレートがファイルから読み取られたもので、内容がパーセント記号を2倍にすることが確実でない場合は、おそらくパーセント文字を検出し、それがプレースホルダの先頭かどうかをプログラムで判断する必要があります。そうすれば、パーサーは%d
(および使用可能な他の文字)のようなシーケンスだけでなく%(xxx)s
などのシーケンスも認識するはずです。
新しいフォーマットでも同様の問題が発生する可能性があります - テキストに中括弧を含めることができます。