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はすべて同じルールです。

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

この問題を解いてみる →

よくある誤解

見た目には何も欠けていないように見えるので、見落としがちです。実際には条件式や引数リストの直後、次の行に移る前にコロンが必要です。

まとめ

SyntaxError: expected ':'は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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