422

私は次のコードを持っています

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
4

6 に答える 6

711
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
于 2012-05-21T00:03:43.890 に答える
62

または、Python 2.6以降、新しい文字列フォーマット(PEP 3101で説明)を使用できます。

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

これは、文字列がより複雑になるので特に便利です。

于 2012-05-21T00:12:34.227 に答える
45

%%%記号を印刷するために使用してみてください。

于 2012-05-21T07:46:33.257 に答える
10

次のキャラクターによってはいつも特別な意味があるので%、選択的にエスケープすることはできません。%

Pythonのドキュメントでは、そのセクションの2番目の表の下部に次のように記載されています。

'%'        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)

あなたが明らかにすでに持っていた知識で。

于 2016-11-27T12:24:06.463 に答える
4

Python 3.6以降を使用している場合は、 f-stringを使用できます。

>>> test = "have it break."
>>> selectiveEscape = f"Print percent % in sentence and not {test}"
>>> print(selectiveEscape)
... Print percent % in sentence and not have it break.
于 2020-01-17T11:42:48.240 に答える
3

フォーマットテンプレートがファイルから読み取られ、コンテンツがパーセント記号を2倍にすることができない場合は、パーセント文字を検出し、それがプレースホルダーの先頭であるかどうかをプログラムで決定する必要があります。次に、パーサーは、%d(および使用できる他の文字)のようなシーケンスだけでなく、%(xxx)sなども認識する必要があります。

新しい形式でも同様の問題が発生する可能性があります。テキストに中括弧を含めることができます。

于 2012-05-22T07:27:15.160 に答える