formatを使用した文字列内で波括弧({)を使用する

概要

python で format を使う場合に、文字列内で波括弧({)を使う場合は波括弧({)を重ねる必要がある。

事象

Slack APIを使う際にdataの文字列に波括弧({)を入れる必要があった。また、文字列には変数も展開する必要があったので、 formatを使い、以下のように書いていたが、その場合pep8でも引っかかり、また、プログラムもエラーとなった。

data = f'{"text": "{message}"}'

実行時のエラー

'...'.format(...) has unused arguments at position(s): 0
'...'.format(...) is missing arguments(s) for placeholder(s):

解決策

formatを使った文字列内で、そのまま波括弧({)を表示されたい場合は、波括弧({)を重ねて "{{" とする。

data = '{{"text": "{}"}}'.format("message")
# data: {"text": "{}"}

また、Pythonのバージョン3.6から追加されたfを使うと以下のようになる。

data = f'{{"text":"{message}"}}'