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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。
関連するエラー
- IndentationError: expected an indented block の原因と直し方if・for・def・whileの本体を書き忘れたときに出る、Python学習者が最初につまずくエラーです。
- TabError: inconsistent use of tabs and spaces の原因と直し方同じブロックの中でタブとスペースを混在させたときに出るエラーです。
- SyntaxError: Missing parentheses in call to 'print' の原因と直し方Python 2の書き方(print文)をPython 3で使うと出るエラーです。
- SyntaxError: invalid syntax(if x = 5:)の原因と直し方条件式の中で = (代入)を使おうとしたときに出るエラーです。