PythonのSyntaxErrorとは?意味・原因・直し方を初心者向けに解説

ながみえ

Pythonでコードを書いていると、SyntaxErrorというエラーが表示されることがあります。

SyntaxErrorは、Pythonの文法ルールに合っていないコードを書いたときに発生するエラーです。特に初心者のうちは、if文やfor文の最後にコロンを付け忘れたり、カッコやクォーテーションを閉じ忘れたりしたときによく出てきます。

エラーメッセージに「invalid syntax」と表示されることも多く、最初はどこを直せばよいのか分かりにくいかもしれません。ただ、SyntaxErrorは原因になりやすいパターンがある程度決まっています。

この記事では、PythonのSyntaxErrorの意味、よくある原因、エラー例、修正例、確認ポイントを初心者向けに解説します。

Pythonでよく出るエラーを一覧で確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

SyntaxErrorとは

SyntaxErrorは、Pythonの文法として正しくない書き方をしたときに発生するエラーです。

「Syntax」は「文法」という意味です。そのため、SyntaxErrorは簡単に言うと「Pythonの書き方のルールに合っていません」というエラーだと考えると分かりやすいです。

たとえば、次のようなコードを書くとSyntaxErrorが発生します。

age = 18

if age >= 18
    print("大人です")

このコードでは、if文の行の最後にコロンがありません。Pythonでは、if文やfor文などのあとに処理のまとまりを書く場合、条件式の最後にコロンを付ける必要があります。

正しくは、次のように書きます。

age = 18

if age >= 18:
    print("大人です")

このように、SyntaxErrorはプログラムの処理内容そのものよりも、コードの書き方に問題があるときに出るエラーです。

NameErrorやTypeErrorのように、変数名や値の種類が原因で起きるエラーとは少し違います。SyntaxErrorの場合は、Pythonがコードを読み取る段階で「この書き方は文法として正しくない」と判断して、プログラムの実行を止めます。

初心者のうちは、SyntaxErrorが出ると難しく感じるかもしれません。しかし、多くの場合はコロン、カッコ、クォーテーション、余計な記号などを確認すると原因が見つかります。まずは「Pythonの文法ルールに合っていない場所がある」という意味だと覚えておきましょう。

SyntaxErrorが起きる主な原因

SyntaxErrorが起きる原因はいくつかあります。

初心者の場合は、特にコロンの付け忘れ、カッコの閉じ忘れ、クォーテーションの閉じ忘れなど、記号に関するミスで発生することが多いです。

よくある原因を整理すると、次のようになります。

原因内容確認すること
コロンの付け忘れif文、for文、while文、def文などの末尾にコロンがない行の最後に : があるか
カッコの閉じ忘れ([{ を開いたまま閉じていない開いたカッコと閉じたカッコが対応しているか
クォーテーションの閉じ忘れ文字列を囲む "' が閉じられていない文字列の開始と終了がそろっているか
不要な記号を書いている余計なカンマ、ピリオド、演算子などが入っているエラー行の前後に不要な記号がないか
キーワードの書き間違いifforwhiledef などのつづりを間違えているPythonのキーワードを正しく書けているか
比較演算子の書き方ミス>==> と書くなど、記号の順番を間違えている比較演算子の書き方が正しいか

SyntaxErrorは、エラーメッセージで表示された行そのものに原因があるとは限りません。

たとえば、カッコやクォーテーションを閉じ忘れた場合、実際にミスをした行ではなく、その次の行や少し後の行でエラーが表示されることがあります。そのため、SyntaxErrorが出たときは、エラー行だけを見るのではなく、前後の行も一緒に確認することが大切です。

また、Pythonでは記号の位置や書き方がとても重要です。日本語の文章では多少記号が抜けても意味が伝わることがありますが、プログラムではコロンやカッコが1つ足りないだけでも、Pythonがコードを正しく読み取れなくなります。

最初のうちは、エラーを見てすぐに原因を見つけるのは難しいかもしれません。まずは「コロン」「カッコ」「クォーテーション」「余計な記号」の4つを順番に確認すると、SyntaxErrorの原因を見つけやすくなります。

SyntaxErrorのエラー例と修正例

ここからは、SyntaxErrorが発生する具体的なコード例と、その修正例を見ていきます。

SyntaxErrorは、コードの書き方がPythonの文法ルールに合っていないときに発生します。原因を文章だけで覚えるよりも、実際のコードで確認した方が理解しやすいです。

コロンを付け忘れている場合

Pythonでは、if文、for文、while文、def文などを書くときに、行の最後にコロンを付ける必要があります。初心者がSyntaxErrorでつまずきやすい代表的なパターンです。

次のコードでは、if文の最後にコロンがないため、SyntaxErrorが発生します。

age = 18

if age >= 18
    print("大人です")

このコードでは、if age >= 18 の行の最後に : がありません。Pythonは、条件のあとに処理のまとまりが続くことをコロンで判断します。

修正するには、if文の最後にコロンを付けます。

age = 18

if age >= 18:
    print("大人です")

if文だけでなく、for文、while文、def文、class文でも同じようにコロンが必要です。条件や繰り返し、関数定義を書いたときは、行の最後に : があるか確認しましょう。

カッコを閉じ忘れている場合

関数を呼び出すときやリストを作るときに、カッコを閉じ忘れるとSyntaxErrorが発生することがあります。

次のコードでは、print関数のカッコが閉じられていません。

print("こんにちは"

このコードでは、print( でカッコを開いていますが、最後の ) がありません。そのため、Pythonはどこで関数の呼び出しが終わるのか判断できません。

修正するには、開いたカッコに対応する閉じカッコを追加します。

print("こんにちは")

カッコには、丸カッコ ()、角カッコ []、波カッコ {} があります。開いたカッコと閉じたカッコが対応しているかを確認すると、原因を見つけやすくなります。

クォーテーションを閉じ忘れている場合

文字列を書くときは、ダブルクォーテーション " またはシングルクォーテーション ' で囲む必要があります。開始と終了がそろっていないと、Pythonはどこまでが文字列なのか分かりません。

次のコードでは、文字列を閉じるダブルクォーテーションがありません。

message = "こんにちは
print(message)

このコードでは、"こんにちは のあとに閉じる " がないため、文字列が途中で終わっていない状態になっています。

修正するには、文字列の最後にダブルクォーテーションを追加します。

message = "こんにちは"
print(message)

文字列は、最初と最後の記号をそろえることが大切です。" で始めた場合は " で閉じ、' で始めた場合は ' で閉じます。

比較演算子の書き方を間違えている場合

条件式を書くときに、比較演算子の順番を間違えるとSyntaxErrorになることがあります。

次のコードでは、「18以上」を表したいのに、比較演算子の順番を間違えています。

age = 18

if age => 18:
    print("大人です")

Pythonでは、「以上」は >= と書きます。=> という書き方はPythonの文法として正しくないため、SyntaxErrorが発生します。

修正するには、比較演算子を正しい順番にします。

age = 18

if age >= 18:
    print("大人です")

比較演算子では、>=<===!= などの書き方をよく使います。記号の順番が違うだけでもエラーになるため、条件式を書いたときは演算子の形も確認しましょう。

余計な記号を書いている場合

コードの途中や行末に不要な記号が入っていると、Pythonが文法を正しく読み取れず、SyntaxErrorになることがあります。

次のコードでは、1行目の最後に余計なピリオドがあります。

name = "太郎".
print(name)

このコードでは、name = "太郎" のあとに . が付いています。Pythonでは、この位置にピリオドを書く文法ではないため、SyntaxErrorが発生します。

修正するには、不要なピリオドを削除します。

name = "太郎"
print(name)

余計な記号は、自分では気づきにくいことがあります。エラーが出た行だけでなく、その前後の行に不要なカンマ、ピリオド、演算子などがないか確認しましょう。

キーワードのつづりを間違えている場合

Pythonには、if、for、while、defなど、特別な意味を持つキーワードがあります。これらのキーワードのつづりを間違えると、SyntaxErrorが発生することがあります。

次のコードでは、ifをiffと書いています。

score = 80

iff score >= 80:
    print("合格です")

Pythonにはiffというキーワードはありません。そのため、Pythonはこの行を正しい文法として読み取れず、SyntaxErrorを表示します。

修正するには、キーワードを正しいつづりにします。

score = 80

if score >= 80:
    print("合格です")

キーワードのつづりは、英単語として似ていても、Pythonでは1文字違うだけで別のものとして扱われます。エラーが出たときは、if、for、while、defなどを正しく書けているか確認しましょう。

代入と比較の書き方を混同している場合

Pythonでは、値を入れるときは = を使い、値が等しいかを比べるときは == を使います。使う場所を間違えると、SyntaxErrorになることがあります。

次のコードでは、if文の条件式の中で代入の = を使っています。

number = 10

if number = 10:
    print("10です")

このコードでは、「numberが10と等しいか」を調べたい場面です。しかし、条件式の中で = を使っているため、Pythonの文法として正しくありません。

修正するには、比較のために == を使います。

number = 10

if number == 10:
    print("10です")

=== は見た目が似ていますが、意味は違います。= は代入、== は比較です。if文の条件で「同じかどうか」を確認したいときは、== を使いましょう。

SyntaxErrorが出たときの確認ポイント

SyntaxErrorが出たときは、エラーメッセージに表示された行を中心に、前後の行もあわせて確認することが大切です。

特に、カッコやクォーテーションの閉じ忘れがある場合、実際に間違えた行ではなく、その次の行でエラーが表示されることがあります。エラー行だけを見て原因が見つからないときは、1つ前の行も見直してみましょう。

SyntaxErrorが出たときは、次の点を順番に確認してみてください。

  1. if文、for文、while文、def文などの最後にコロンがあるか
  2. 開いたカッコをきちんと閉じているか
  3. 文字列のクォーテーションが閉じられているか
  4. 余計なカンマ、ピリオド、演算子などを書いていないか
  5. if、for、while、defなどのキーワードのつづりが正しいか
  6. 比較演算子を正しい順番で書いているか
  7. 代入の = と比較の == を混同していないか
  8. エラー行の1つ前の行にもミスがないか

たとえば、次のようなエラーが出たとします。

SyntaxError: invalid syntax

invalid syntax は、「文法が正しくありません」という意味です。このメッセージだけでは、具体的にどこが間違っているのか分かりにくいことがあります。

その場合は、まずエラーが表示された行を見ます。次に、その行の直前にあるコードを確認します。特に、コロン、カッコ、クォーテーションの3つは見落としやすいポイントです。

SyntaxErrorは、すべてを暗記して直す必要はありません。エラーが出たら、まずは「Pythonの書き方のどこかにミスがある」と考えて、よくある原因から順番に確認していきましょう。

SyntaxErrorでよく見るメッセージ

SyntaxErrorには、いくつかの代表的なエラーメッセージがあります。

メッセージの意味を少しでも知っておくと、「どこを確認すればよいか」を絞り込みやすくなります。ここでは、Python初心者がよく見るSyntaxErrorのメッセージを整理します。

エラーメッセージ意味よくある原因確認すること
SyntaxError: invalid syntax文法が正しくないコロン忘れ、不要な記号、演算子の書き間違いエラー行とその前後の行
SyntaxError: expected ':'コロンが必要if文、for文、while文、def文などの末尾にコロンがない行の最後に : があるか
SyntaxError: '(' was never closed丸カッコが閉じられていない( を書いたあとに ) を書いていないカッコの対応
SyntaxError: '[' was never closed角カッコが閉じられていないリストなどで [ を閉じ忘れている[] がそろっているか
SyntaxError: '{' was never closed波カッコが閉じられていない辞書や集合で { を閉じ忘れている{} がそろっているか
SyntaxError: unterminated string literal文字列が途中で終わっていないクォーテーションを閉じ忘れている"' がそろっているか
SyntaxError: invalid decimal literal数値の書き方が正しくない数値と文字を不自然につなげている数値の直後に不要な文字がないか

たとえば、次のようなメッセージが表示された場合を考えてみましょう。

SyntaxError: expected ':'

これは、「ここにはコロンが必要です」という意味です。多くの場合、if文、for文、while文、def文などの最後に : を付け忘れています。

次のコードでは、if文の最後にコロンがないため、このエラーが発生します。

score = 80

if score >= 60
    print("合格です")

修正するには、if文の最後にコロンを追加します。

score = 80

if score >= 60:
    print("合格です")

また、次のようなメッセージが表示された場合は、カッコの閉じ忘れを確認します。

SyntaxError: '(' was never closed

このメッセージは、「開いた丸カッコが閉じられていません」という意味です。

たとえば、次のコードでは print( のカッコを閉じ忘れています。

print("Pythonを学習中です"

修正するには、最後に ) を追加します。

print("Pythonを学習中です")

SyntaxErrorのメッセージは、最初は英語で分かりにくく感じるかもしれません。ただ、よく見る表現はある程度決まっています。

invalid syntax が出たら文法全体、expected ':' が出たらコロン、was never closed が出たらカッコ、unterminated string literal が出たらクォーテーションを確認すると、原因を見つけやすくなります。

SyntaxErrorに関するよくある質問

ここでは、PythonのSyntaxErrorについて、初心者が疑問に感じやすいポイントをQ&A形式で整理します。

エラーメッセージの意味や、原因が見つからないときの考え方を確認しておくと、実際にSyntaxErrorが出たときにも落ち着いて対応しやすくなります。

SyntaxError: invalid syntaxとはどういう意味ですか?

SyntaxError: invalid syntax は、「Pythonの文法として正しくない書き方があります」という意味です。

たとえば、if文の最後にコロンがない、カッコを閉じ忘れている、余計な記号を書いている、といった場合に表示されます。

age = 18

if age >= 18
    print("大人です")

このコードでは、if age >= 18 の最後にコロンがないため、SyntaxErrorが発生します。

修正するには、次のようにコロンを追加します。

age = 18

if age >= 18:
    print("大人です")

invalid syntax は原因が少し広いメッセージなので、まずはエラー行とその前後の行を確認しましょう。

SyntaxErrorの原因がエラー行に見つからないのはなぜですか?

SyntaxErrorの原因は、エラーメッセージに表示された行ではなく、その前の行にあることがあります。

特に、カッコやクォーテーションを閉じ忘れた場合は、Pythonが次の行まで読み進めてから「文法がおかしい」と判断することがあります。

message = "こんにちは
print(message)

このコードでは、1行目の文字列を閉じるクォーテーションがありません。しかし、実際のエラーは2行目付近で表示されることがあります。

修正するには、文字列の最後にクォーテーションを追加します。

message = "こんにちは"
print(message)

エラー行だけを見ても原因が分からないときは、1つ前の行も確認してみましょう。

SyntaxErrorとIndentationErrorの違いは何ですか?

SyntaxErrorは、Pythonの文法として正しくない書き方をしたときに発生するエラーです。

一方で、IndentationErrorは、インデントの位置が正しくないときに発生するエラーです。インデントとは、行の先頭に入れるスペースのことです。

違いを整理すると、次のようになります。

エラー名主な原因
SyntaxError文法の書き方が間違っているコロンの付け忘れ、カッコの閉じ忘れ
IndentationErrorインデントが正しくないif文の中の処理が字下げされていない

たとえば、if文の最後にコロンがない場合はSyntaxErrorです。

if True
    print("実行します")

一方で、コロンはあるのに次の行がインデントされていない場合は、IndentationErrorになります。

if True:
print("実行します")

どちらも初心者がよく見るエラーですが、SyntaxErrorは文法全体の書き方、IndentationErrorは行頭のスペースやタブの位置が原因だと考えると分かりやすいです。

SyntaxErrorはプログラムを実行する前に分かるエラーですか?

多くの場合、SyntaxErrorはプログラムの処理が始まる前に見つかります。

Pythonはコードを実行する前に、まず書かれている内容を読み取ります。この段階で文法として正しくない部分があると、Pythonはコードを実行できないため、SyntaxErrorを表示して処理を止めます。

たとえば、次のコードでは、print関数のカッコが閉じられていません。

print("こんにちは"

このような文法ミスがあると、Pythonは「このコードをどう実行すればよいか」を判断できません。そのため、プログラムの途中まで実行されるのではなく、文法を確認する段階で止まります。

SyntaxErrorが出たら最初に何を確認すればよいですか?

まずは、エラーメッセージに表示された行と、その1つ前の行を確認しましょう。

SyntaxErrorは、コロン、カッコ、クォーテーション、余計な記号が原因になることが多いです。最初から難しく考えすぎず、よくあるミスを順番に確認すると原因を見つけやすくなります。

確認するときは、次のような流れがおすすめです。

  1. if文やfor文の最後にコロンがあるか確認する
  2. カッコを開いたままにしていないか確認する
  3. 文字列のクォーテーションが閉じているか確認する
  4. 余計なピリオドやカンマが入っていないか確認する
  5. エラー行の1つ前の行も確認する

SyntaxErrorは、慣れるまでは見つけにくく感じるかもしれません。ただ、原因の多くは基本的な書き方のミスです。落ち着いて1つずつ確認していけば、修正できることが多いです。

まとめ|SyntaxErrorは文法ミスを順番に確認しよう

SyntaxErrorは、Pythonの文法ルールに合っていないコードを書いたときに発生するエラーです。

特に、コロンの付け忘れ、カッコの閉じ忘れ、クォーテーションの閉じ忘れ、余計な記号などが原因になりやすいです。エラーが出たときは、表示された行だけでなく、その前後の行も確認しましょう。

最初のうちは、SyntaxErrorの原因をすぐに見つけるのは難しいかもしれません。まずは、コロン、カッコ、クォーテーション、不要な記号を順番に確認することが大切です。

Pythonでよく出るエラーをまとめて確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド
記事URLをコピーしました