SyntaxError: expected ‘:’ の原因と対処法【Python】

Pythonでプログラムを書いていると、次のようなエラーが表示されることがあります。
SyntaxError: expected ':'
これは、Pythonが「ここにはコロン : が必要」と判断したものの、コロンが見つからなかった場合に発生する構文エラーです。
特に if、for、while、def、class、try などの行末に : を付け忘れたときによく発生します。
この記事では、SyntaxError: expected ':' の意味、原因、具体的な修正方法、間違いやすいコード例について解説します。
SyntaxError: expected ‘:’ とは?
SyntaxError: expected ':' は、Pythonの構文(Syntax)が正しくないことを示すエラーメッセージです。
日本語にすると、
「
:が必要です」
という意味です。
例えば、次のコードを実行するとエラーになります。
if x > 10
print(x)
実行すると、次のようなエラーが表示されます。
SyntaxError: expected ':'
if 文では条件式の最後に : が必要です。
if x > 10:
print(x)
このように修正すればエラーは解消できます。
SyntaxError: expected ':' が発生する主な原因
主な原因は次のとおりです。
-
if文の:を忘れている -
for文の:を忘れている -
while文の:を忘れている -
関数定義
defの:を忘れている -
classの定義で:を忘れている -
try、except、else、finallyの:を忘れている -
with文の:を忘れている -
match、caseの:を忘れている
順番に見ていきましょう。
if文で : を忘れた場合
最もよくあるケースの一つです。
間違ったコード
x = 10
if x > 5
print("5より大きい")
if の条件式の最後に : がありません。
正しいコード
x = 10
if x > 5:
print("5より大きい")
Pythonでは、条件に応じて実行する処理を記述する if 文の末尾に : が必要です。
elif・elseでも : が必要
elif や else でも同様です。
間違ったコード
x = 10
if x > 10:
print("10より大きい")
elif x == 10
print("10です")
else
print("10より小さい")
正しいコード
x = 10
if x > 10:
print("10より大きい")
elif x == 10:
print("10です")
else:
print("10より小さい")
elif と else の行末にも : が必要です。
for文で : を忘れた場合
for 文でも、処理ブロックの開始位置を示すために : を記述します。
間違ったコード
for i in range(5)
print(i)
エラー
SyntaxError: expected ':'
正しいコード
for i in range(5):
print(i)
while文で : を忘れた場合
while 文でも同様です。
間違ったコード
x = 0
while x < 5
print(x)
x += 1
正しいコード
x = 0
while x < 5:
print(x)
x += 1
defで : を忘れた場合
関数を定義する def の行末にも : が必要です。
間違ったコード
def hello()
print("Hello")
エラー
SyntaxError: expected ':'
正しいコード
def hello():
print("Hello")
引数がある場合も同じです。
def greet(name):
print("Hello", name)
classで : を忘れた場合
クラス定義にも : が必要です。
間違ったコード
class Person
pass
正しいコード
class Person:
pass
継承する場合も同様です。
class Student(Person):
pass
try・exceptで : を忘れた場合
例外処理で使用する try、except、else、finally も、行末に : が必要です。
間違ったコード
try
x = 10 / 0
except ZeroDivisionError
print("0で割ることはできません")
正しいコード
try:
x = 10 / 0
except ZeroDivisionError:
print("0で割ることはできません")
try と except の両方に : が必要です。
with文で : を忘れた場合
ファイル操作などで使用する with 文にも : が必要です。
間違ったコード
with open("sample.txt") as f
data = f.read()
正しいコード
with open("sample.txt") as f:
data = f.read()
match・caseで : を忘れた場合
Python 3.10以降で利用できる match 文でも : が必要です。
value = 1
match value:
case 1:
print("1です")
case 2:
print("2です")
match と case の両方で : を使用します。
なぜPythonでは : が必要なのか?
Pythonでは、: によって「ここから処理ブロックが始まる」ことを示します。
例えば、
if x > 10:
print(x)
では、
if x > 10:
が条件を指定する部分で、
print(x)
が条件を満たした場合に実行する処理です。
Pythonはインデントを使って処理ブロックを表現します。
if x > 10:
print(x)
print("大きい値です")
そのため、: は条件や定義の部分と、その後に続く処理ブロックを区切る役割を持っています。
エラーが指している行を確認する
SyntaxError: expected ':' が表示されたら、まずエラーメッセージに表示されている行を確認しましょう。
例えば、
File "sample.py", line 3
if x > 10
^
SyntaxError: expected ':'
この場合、3行目の
if x > 10
に問題があります。
if x > 10:
と修正します。
^ の位置だけを信用しすぎない
Pythonの構文エラーでは、^ が必ずしも本当の原因となった文字を指しているとは限りません。
例えば、次のようなコードです。
if x > 10
print(x)
Pythonは3行目の問題を検出するために、2行目付近を示すことがあります。
そのため、
エラーが示した行だけを見るのではなく、その直前の行も確認する
ことが重要です。
SyntaxError: expected ':' のチェックポイント
エラーが発生したら、次のキーワードを探してみましょう。
| キーワード | : が必要か |
|---|---|
if |
必要 |
elif |
必要 |
else |
必要 |
for |
必要 |
while |
必要 |
def |
必要 |
class |
必要 |
try |
必要 |
except |
必要 |
finally |
必要 |
with |
必要 |
match |
必要 |
case |
必要 |
例えば、
if 条件:
処理
for 変数 in イテラブル:
処理
while 条件:
処理
def 関数名():
処理
という形になります。
: と ; を間違えない
初心者が間違いやすいのが、コロン : とセミコロン ; の混同です。
間違い
if x > 10;
print(x)
正しい
if x > 10:
print(x)
Pythonのブロック開始には : を使用します。
SyntaxError: expected ':' とIndentationErrorの違い
: を追加したあと、今度は IndentationError が発生することがあります。
例えば、
if x > 10:
print(x)
これは : は正しいものの、print() のインデントがありません。
正しくは、
if x > 10:
print(x)
です。
つまり、
-
:がない →SyntaxError: expected ':' -
:はあるがインデントがおかしい →IndentationError
という違いがあります。
SyntaxError: expected ':' の直し方
基本的な修正手順は次の3ステップです。
1. エラーが発生した行を確認する
SyntaxError: expected ':'
と表示されたら、その直前に表示されているファイル名と行番号を確認します。
File "sample.py", line 3
なら3行目付近を確認します。
2. : が必要な構文を確認する
特に、
if
for
while
def
class
try
except
else
elif
with
などを確認します。
3. 行末に : を追加する
例えば、
def add(a, b)
なら、
def add(a, b):
に修正します。
まとめ
SyntaxError: expected ':' は、Pythonで必要なコロン : がない場合に発生する構文エラーです。
特に次の構文でよく発生します。
if 条件:
for 変数 in データ:
while 条件:
def 関数名():
class クラス名:
try:
except Exception:
エラーが発生したら、まずエラー行とその直前の行を確認し、行末の : が抜けていないかチェックするとよいでしょう。
SyntaxError は実行時エラーではなく、Pythonがプログラムの構文を解釈できない段階で発生するエラーです。そのため、エラーメッセージと行番号を確認して、構文そのものを修正する必要があります。
他のPythonエラーの原因と対処法はPythonエラー一覧と対処法に種類別でまとめています。エラーメッセージの読み方もあわせて解説しています。


