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 ':' が発生する主な原因

主な原因は次のとおりです。

  1. if 文の : を忘れている

  2. for 文の : を忘れている

  3. while 文の : を忘れている

  4. 関数定義 def の : を忘れている

  5. class の定義で : を忘れている

  6. try、except、else、finally の : を忘れている

  7. with 文の : を忘れている

  8. 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エラー一覧と対処法に種類別でまとめています。エラーメッセージの読み方もあわせて解説しています。

対面・無料|東京・永田町で毎週土曜日13時

1回の参加で、プログラミングの構造がわかる

ゼロからはじめるPython入門講座

8年間・累計600回開催/これまで全国で2万人以上が参加

「やはり対面で聞けるのはとても気づきがあり、価値があると思います」

参加者の声

  • 本当に初心者からの講座です。プログラミングに触ったことがなくて大丈夫です
  • 対面だから、その場で聞けます。つまずいた所を持ち帰らずに解決できます
  • 講座は1時間。そのあとも残って学習を続けられ、講師にも質問できます
  • 独学で挫折した方も。糸口が見つかって、講座のあと会員になる方が多くいます

無料で参加する|開催日程を見る

参加費は無料です