SyntaxError: expected ':' の原因と直し方
if・for・def・whileなど、ブロックを始める文の末尾にコロンを付け忘れたときに出るエラーです。他言語の波括弧に慣れていると忘れやすいポイントです。
エラーメッセージの読み方
File "main.py", line 2
main.py- ファイル名
2- 行番号 — Pythonが構文解析を諦めた位置
SyntaxError- エラークラス — 実行前の構文チェックで検出されました
expected ':'- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 x = 5 2 if x > 0 ^ 3 print(x)
File "main.py", line 2
if x > 0
^
SyntaxError: expected ':'
ifの条件式のあとには必ずコロンが要ります。波括弧の代わりにコロンとインデントでブロックを表すのがPythonの文法です。
直し方: (空) を : にします。
広告
広告スロット(未設定)
パターン2
1 def f() ^ 2 return 1
File "main.py", line 1
def f()
^
SyntaxError: expected ':'
関数定義の引数リストの後にもコロンが必要です。忘れるとPythonはどこからが本体か判断できません。
直し方: (空) を : にします。
パターン3
1 for i in range(3) ^ 2 print(i)
File "main.py", line 1
for i in range(3)
^
SyntaxError: expected ':'
forの反復対象を書いたあとにもコロンが要ります。if・for・def・whileはすべて同じルールです。
直し方: (空) を : にします。
パターン4
1 x = 1 2 while x < 5 ^ 3 x += 1
File "main.py", line 2
while x < 5
^
SyntaxError: expected ':'
whileの条件式のあとにもコロンが必要です。if・for・def・whileはすべて同じ文法規則に従います。
直し方: (空) を : にします。
パターン5
1 class Dog ^ 2 pass
File "main.py", line 1
class Dog
^
SyntaxError: expected ':'
クラス定義の後にもコロンが要ります。忘れるとPythonはどこからが本体か判断できません。
直し方: (空) を : にします。
よくある誤解
見た目には何も欠けていないように見えるので、見落としがちです。実際には条件式や引数リストの直後、次の行に移る前にコロンが必要です。
実務での勘所
コロンは波括弧を使う言語の{に相当する役割を持ちますが、開きだけで閉じに相当する記号が無いのがPythonの特徴です。「ここから先はインデントされた範囲がこの文の中身です」とパーサーに伝える合図がコロン1つだけなので、書き忘れると文の境界そのものが定義できずSyntaxErrorになります。なお、辞書リテラル({"key": 1})や型ヒント(x: int)でもコロンを使いますが、これらはブロックの開始とは無関係の別の用途なので混同しないよう注意してください。
関連するエラー
- IndentationError: expected an indented block の原因と直し方if・for・def・whileの本体を書き忘れたときに出る、Python学習者が最初につまずくエラーです。
- TabError: inconsistent use of tabs and spaces の原因と直し方同じブロックの中でタブとスペースを混在させたときに出るエラーです。
- Python 2のprint文をPython 3で使った原因と直し方Python 2の書き方(print文)をPython 3で使うと出るエラーです。
- SyntaxError: invalid syntax(if x = 5:)の原因と直し方条件式の中で = (代入)を使おうとしたときに出るエラーです。