Pythonのコードを実行したとき、次のようなエラーが表示されることがあります。
SyntaxError: invalid syntax「SyntaxError」は、Pythonの文法に合わないコードが書かれていることを示すエラーです。「invalid syntax」は、日本語では「無効な構文」という意味になります。
主な原因は、コロンや括弧の不足、記号の書き間違いなどです。
この記事では、「SyntaxError: invalid syntax」が発生する代表的な原因と直し方を、初心者向けに分かりやすく解説します。
SyntaxErrorとは
「SyntaxError」は、Pythonがコードの意味を読み取れないときに発生します。
日本語の文章でも、句読点や語順が大きく崩れると、何を伝えたいのか分からなくなることがあります。プログラムにも文法があり、その規則から外れると処理を開始できません。
例えば、次のコードでは「if文」の末尾にコロンがありません。
score = 80
# 行末のコロンがないためエラーになる
if score >= 70
print("合格です")実行すると、「SyntaxError」が表示されます。
正しくは、条件の後ろにコロンを付けます。
score = 80
# 条件の末尾にコロンを付ける
if score >= 70:
print("合格です")「SyntaxError」は、プログラムの処理中ではなく、実行前にコードを読み込む段階で見つかるエラーです。
エラーメッセージの見方
SyntaxErrorが発生すると、問題のあるファイル名や行番号が表示されます。
File "main.py", line 3
if score >= 70
^
SyntaxError: expected ':'このメッセージから、次の情報を確認できます。
- エラーが見つかったファイル:「main.py」
- Pythonが問題に気づいた行:「3行目」
- 問題があると判断された位置:「^」の位置
- エラーの内容:「コロンが必要」
最初に「line 3」のような行番号を確認し、次に「^」が示している周辺を見ましょう。
ただし、「^が示す場所が必ず間違いの原因とは限らない」点には注意が必要です。
Pythonがその位置まで読み進めて、初めて文法の不一致に気づくことがあるためです。原因が見つからない場合は、表示された行だけでなく、その一つ前の行も確認しましょう。
if文のコロンが抜けている
「if」「elif」「else」の末尾にはコロンが必要です。
temperature = 28
# コロンがないためエラーになる
if temperature >= 25
print("暑い日です")正しくは次のように書きます。
temperature = 28
# 条件の末尾にコロンを付ける
if temperature >= 25:
print("暑い日です")コロンは、「ここから条件が成立したときの処理が始まる」ことをPythonへ伝える記号です。
「if」以外にも、次のような文の末尾にはコロンを付けます。
- 「for」
- 「while」
- 「def」
- 「class」
- 「try」
- 「except」
末尾にコロンを付けたら、次の行をインデントすることも忘れないようにしましょう。
for文や関数のコロンが抜けている
「for文」のコロンが抜けた場合も、SyntaxErrorになります。
fruits = ["りんご", "みかん", "バナナ"]
# for文の末尾にコロンがない
for fruit in fruits
print(fruit)正しくは次のとおりです。
fruits = ["りんご", "みかん", "バナナ"]
# for文の末尾にコロンを付ける
for fruit in fruits:
print(fruit)関数を定義する「def」の末尾にもコロンが必要です。
# 関数名の後ろにコロンを付ける
def greet():
print("こんにちは")
greet()「処理のまとまりが次の行から始まる文にはコロンが必要」と考えると覚えやすくなります。
括弧が閉じられていない
開いた丸括弧を閉じ忘れると、SyntaxErrorになります。
name = "モトヤ"
# 閉じ括弧が不足している
print("こんにちは、" + namePythonのバージョンによっては、次のようなメッセージが表示されます。
SyntaxError: '(' was never closed開いた括弧に対応する閉じ括弧を追加すると修正できます。
name = "モトヤ"
# 開き括弧と閉じ括弧をそろえる
print("こんにちは、" + name)丸括弧だけでなく、リストの角括弧や辞書の波括弧も、開いたら閉じる必要があります。
# 括弧を正しく閉じる
numbers = [10, 20, 30]
user = {"name": "モトヤ", "age": 32}
print(numbers)
print(user)コードが長い場合は、括弧の数を目で数えるよりも、対応する括弧を強調表示してくれるコードエディターを利用すると見つけやすくなります。
引用符が閉じられていない
文字列を囲む引用符が閉じられていない場合も、SyntaxErrorが発生します。
# 末尾のダブルクォーテーションがない
message = "Pythonを学習します
print(message)正しくは、文字列の両側を同じ引用符で囲みます。
# 文字列の両側を引用符で囲む
message = "Pythonを学習します"
print(message)文字列の中で同じ引用符を使う場合にも注意が必要です。
# 外側と内側で異なる引用符を使う
message = '先生が「Pythonを始めよう」と言いました'
print(message)引用符を閉じ忘れると、Pythonが次の行まで文字列の続きとして読もうとする場合があります。
エラーが次の行に表示されていても、その前の行の引用符を確認しましょう。
=と==を間違えている
「=」は変数へ値を代入する記号です。「==」は、左右の値が等しいか比較する記号です。
条件式で「=」を使うと、SyntaxErrorになります。
score = 80
# 比較で=を使っているためエラーになる
if score = 80:
print("80点です")値を比較する場合は、「==」を使います。
score = 80
# 左右の値が等しいか比較
if score == 80:
print("80点です")2つの記号は役割が異なります。
- 値を変数に入れる:「=」
- 左右が等しいか調べる:「==」
条件式でSyntaxErrorが発生した場合は、比較演算子が正しいか確認しましょう。
カンマが抜けている
関数へ複数の値を渡すときや、リストの要素を並べるときは、値の間にカンマを入れます。
# 2つの変数を用意
name = "モトヤ"
age = 32
# 引数の間にカンマがないためエラーになる
print(name age)正しくは次のように書きます。
name = "モトヤ"
age = 32
# 引数をカンマで区切る
print(name, age)SyntaxErrorが発生した位置の直前に、変数や数値が続けて書かれている場合は、カンマや演算子が抜けていないか確認しましょう。
全角記号が混ざっている
日本語入力中にコードを書くと、全角の記号が混ざることがあります。
# 全角の括弧を使っているためエラーになる
print("こんにちは")見た目は似ていますが、Pythonの記号には半角文字を使います。
# 半角の括弧を使用
print("こんにちは")特に間違えやすい記号は次のとおりです。
- 全角の「()」と半角の「()」
- 全角の「:」と半角の「:」
- 全角の「,」と半角の「,」
- 全角の空白と半角の空白
- 日本語用の引用符と半角の引用符
日本語入力を使った直後にエラーが発生した場合は、記号が半角になっているか確認しましょう。
予約語を変数名に使っている
Pythonで特別な意味を持つ単語を「予約語」と呼びます。
予約語は変数名として使用できません。
# classは予約語なので変数名にできない
class = "初心者向け講座"
print(class)「class」はクラスを定義するときに使う予約語です。別の変数名へ変更しましょう。
# 予約語ではない変数名を使う
course_name = "初心者向け講座"
print(course_name)代表的な予約語には、次のようなものがあります。
if
else
for
while
def
class
return
import
True
False
None変数名を変更した直後にSyntaxErrorが出た場合は、その名前がPythonの予約語ではないか確認しましょう。
直前の行に原因がある場合
次のコードでは、Pythonが「print()」の行でエラーに気づく場合があります。
numbers = [10, 20, 30
# エラーの原因は一つ前の行にある
print(numbers)問題は「print()」ではなく、その前の行でリストの閉じ括弧が抜けていることです。
# リストの閉じ括弧を追加
numbers = [10, 20, 30]
print(numbers)SyntaxErrorが発生した行を何度見ても原因が分からないときは、次の順番で確認します。
- 「^」が示す位置を見る
- エラー行の先頭から末尾まで確認する
- 一つ前の行の括弧や引用符を見る
- さらに上の行で処理が閉じているか確認する
「エラーが表示された場所」と「間違いを書いた場所」は同じとは限りません。
Pythonは、文章を左から読んで意味が通らなくなった人のように、「これ以上は解釈できない」と判断した場所を示します。この考え方を知っていると、エラー行だけにこだわらず原因を探せます。
Pythonのバージョンが原因になる場合
使用しているPythonのバージョンでは対応していない書き方を使うと、SyntaxErrorが発生する場合があります。
例えば、「match文」はPython 3.10以降で利用できます。
status = 1
# Python 3.10以降で利用できる書き方
match status:
case 1:
print("処理中です")
case 2:
print("完了しました")古いPythonで実行すると、この書き方を文法として認識できません。
使用中のPythonのバージョンは、次のコマンドで確認できます。
python --version環境によっては、次のコマンドを使用します。
python3 --versionWebサイトや書籍のコードが正しく見えるのにSyntaxErrorが発生する場合は、対応するPythonのバージョンも確認しましょう。
SyntaxErrorとIndentationErrorの違い
「SyntaxError」と似たエラーに「IndentationError」があります。
- 文法や記号に問題がある:「SyntaxError」
- 行頭のインデントに問題がある:「IndentationError」
例えば、「if文」のコロンがない場合はSyntaxErrorです。
score = 80
# コロンがないためSyntaxErrorになる
if score >= 70
print("合格です")コロンはあるものの、次の行がインデントされていない場合はIndentationErrorです。
score = 80
if score >= 70:
# 字下げがないためIndentationErrorになる
print("合格です")どちらもコードの実行前に見つかりますが、確認する場所が異なります。
SyntaxErrorでは記号や書き方を確認し、IndentationErrorでは行頭の空白を確認しましょう。
SyntaxErrorを直す順番
SyntaxErrorが発生したときは、次の順番で確認すると原因を見つけやすくなります。
- エラーメッセージの行番号を確認する
- 「^」が示す位置を見る
- コロンやカンマが抜けていないか確認する
- 括弧や引用符が閉じているか確認する
- 一つ前の行を確認する
- 全角記号が混ざっていないか確認する
- 予約語を変数名に使っていないか確認する
- Pythonのバージョンを確認する
一度にコード全体を書き直す必要はありません。
「エラーが示す行」「直前の行」「記号の組み合わせ」の順に狭い範囲から調べると、修正箇所を見失いにくくなります。
SyntaxErrorを防ぐ方法
SyntaxErrorを完全になくすことは難しいですが、次の方法で減らせます。
- Visual Studio Codeなどのコードエディターを使う
- 括弧や引用符は開いた直後に閉じる
- コロンを書いたら改行してインデントする
- 日本語入力から半角入力へ戻してから記号を書く
- 一度に長いコードを書かず、少しずつ実行する
- エディターの構文チェックや自動補完を利用する
- サンプルコードの一部分だけをコピーしない
特に有効なのは、「少し書いたら実行する」ことです。
50行をまとめて書いてから実行すると、原因を50行の中から探すことになります。5行ずつ実行していれば、問題がある範囲を小さくできます。
SyntaxErrorは、知識不足だけで起きるエラーではありません。経験者でも括弧やコロンを打ち忘れることがあります。
エラーを出さないことより、「原因を狭い範囲から探せる書き方」を身につけることが大切です。
まとめ
「SyntaxError: invalid syntax」は、Pythonの文法として解釈できないコードがある場合に発生します。
主な原因は次のとおりです。
- コロンが抜けている
- 括弧が閉じられていない
- 引用符が閉じられていない
- 「=」と「==」を間違えている
- カンマが抜けている
- 全角記号が混ざっている
- 予約語を変数名に使っている
- Pythonのバージョンに対応していない
正しい「if文」の基本形は次のとおりです。
score = 80
# 条件の末尾にコロンを付ける
if score >= 70:
print("合格です")
else:
print("不合格です")エラーが表示されたら、まず行番号と「^」の位置を確認します。そこで原因が見つからない場合は、一つ前の行にある括弧や引用符も調べましょう。
SyntaxErrorは、Pythonが「この書き方では意味を判断できない」と教えてくれている状態です。
エラーメッセージを失敗の通知として見るのではなく、「確認する範囲を示す手がかり」として利用すると、落ち着いて修正できるようになります。

