Code Fix

中級

f忘れでf文字列が展開されない

f文字列のfを書き忘れると、波括弧の中身は変数として展開されず、そのままの文字として表示されます。

なぜエラーが出ないのか

出力: {name}
(エラーなし)
Pythonは何も報告しません。文法として正しいためです
出力: {name}
実際の挙動 — 期待した結果と食い違っている箇所
見つけ方
エラーが出ないので、出力を目で確かめるしかありません。この種の誤りが最も発見が遅れます

このエラーが出る典型パターン

パターン1

 1  name = "Tom"
 2  msg =       "{name}"
             ^
 3  print(msg)
出力: {name}期待: Tom (エラーにはなりません)

f忘れると、波括弧はただの文字として扱われ、変数の値に置き換わりません。

直し方: (空) を f にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  age = 20
 2  print(    "Age: {age}")
            ^
出力: Age: {age}期待: Age: 20 (エラーにはなりません)

print()の引数でも同じです。f忘れは構文エラーにならないため、実行するまで気づきにくいミスです。

直し方: (空) を f にします。

この問題を解いてみる →

パターン3

 1  x = 5
 2  y = 10
 3  print(      "{x} + {y} = {x+y}")
             ^
出力: {x} + {y} = {x+y}期待: 5 + 10 = 15 (エラーにはなりません)

式を埋め込む{x+y}のような書き方も、f文字列でなければ計算されずそのまま表示されます。

直し方: (空) を f にします。

この問題を解いてみる →

パターン4

 1  city = "Tokyo"
 2  country = "Japan"
 3  print(      "{city}, {country}")
             ^
出力: {city}, {country}期待: Tokyo, Japan (エラーにはなりません)

複数の変数を埋め込む場合も同じです。fを忘れると波括弧はどちらもただの文字として表示されます。

直し方: (空) を f にします。

この問題を解いてみる →

パターン5

 1  score = 88
 2  print(    "Score: {score}/100")
            ^
出力: Score: {score}/100期待: Score: 88/100 (エラーにはなりません)

数値を埋め込む場合も同様です。構文エラーにはならないため、出力を見るまで気づきません。

直し方: (空) を f にします。

この問題を解いてみる →

よくある誤解

波括弧の書き方自体は合っているため、構文エラーにはなりません。実行して出力を見るまで、展開されていないことに気づきにくいミスです。

実務での勘所

f文字列がfという専用の接頭辞を必要とするのは、既存の文字列リテラルとの後方互換性のためです。もし波括弧を含む普通の文字列すべてが自動的に変数展開の対象になってしまうと、JSON風の文字列やテンプレート文字列など、波括弧をそのまま含む既存のコードがすべて壊れてしまいます。Pythonの文字列フォーマットは%演算子(最も古い)、str.format()メソッド、f文字列(Python 3.6以降)と3世代あり、f文字列は変数名を波括弧の中に直接書けることで書きやすさを大きく改善した最新の方式です。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)