Code Fix

初級

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)でもコロンを使いますが、これらはブロックの開始とは無関係の別の用途なので混同しないよう注意してください。

演習をはじめる

関連するエラー

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