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}"}}'