SyntaxErrorとは?Pythonでよくある原因と解決方法を初心者向けに解説

SyntaxError(シンタックスエラー)は、Pythonをプログラミングしているときによく遭遇するエラーの一つです。
「コードを書いたのに実行できない」「SyntaxErrorと表示されて、どこを直せばいいかわからない」と悩むPython初心者も多いでしょう。
SyntaxErrorは、簡単にいうとPythonの文法(構文)が正しくないときに発生するエラーです。
この記事では、PythonのSyntaxErrorについて、以下の内容を初心者向けにわかりやすく解説します。
-
SyntaxErrorとは何か
-
SyntaxErrorが発生する原因
-
よくあるSyntaxErrorの例
-
SyntaxErrorの読み方
-
SyntaxErrorの解決方法
-
SyntaxErrorを防ぐ方法
-
SyntaxErrorと他のエラーの違い
SyntaxErrorとは?
SyntaxErrorとは、Pythonの文法(Syntax)が正しくないときに発生するエラーです。
Syntaxは「構文」「文法」という意味があります。
たとえば、Pythonでは文字列を記述するときに、通常は"や'で囲みます。
name = "Taro
このコードでは、文字列の最後に"がありません。
そのためPythonを実行すると、SyntaxErrorが発生します。
SyntaxError: unterminated string literal
つまり、
「Pythonの文法として正しくないコードなので、実行できません」
という意味です。
SyntaxErrorが発生する主な原因
SyntaxErrorの原因はさまざまですが、初心者がよく遭遇するものには以下があります。
| 原因 | 例 |
|---|---|
:の付け忘れ |
if x == 10 |
| 括弧の閉じ忘れ | print("Hello" |
| クォーテーションの閉じ忘れ | name = "Taro |
| インデントの間違い | ブロックの位置が不正 |
| Pythonの予約語の誤使用 | class = 10 |
| カンマなどの記号の間違い | print("A" "B"など |
| 不正な構文 | Pythonの文法に存在しない書き方 |
一つずつ見ていきましょう。
1. コロン「:」の付け忘れ
Pythonでは、ifやfor、while、関数定義などの後ろに:を付けます。
たとえば、以下はSyntaxErrorになります。
x = 10
if x == 10
print("10です")
if文の条件式の最後に:がありません。
正しくは以下です。
x = 10
if x == 10:
print("10です")
Pythonでは、以下のような構文で:を使用します。
if 条件:
for 変数 in リスト:
while 条件:
def 関数名():
初心者がSyntaxErrorでつまずく代表的なポイントです。
2. 括弧の閉じ忘れ
括弧の対応が合っていない場合もSyntaxErrorの原因になります。
たとえば、
print("Hello"
このコードでは(を開いているものの、)を閉じていません。
正しくは、
print("Hello")
です。
複雑なコードになるほど、括弧の閉じ忘れは見つけにくくなります。
括弧には種類がある
Pythonでは主に以下の括弧を使用します。
() 丸括弧
[] 角括弧
{} 波括弧
それぞれ対応する閉じ括弧が必要です。
numbers = [1, 2, 3]
data = {"name": "Taro"}
result = (10 + 20) * 2
3. クォーテーションの閉じ忘れ
文字列を囲む'や"の閉じ忘れも、SyntaxErrorの代表的な原因です。
たとえば、
name = "Taro
これは正しくありません。
正しくは、
name = "Taro"
です。
シングルクォーテーションを使う場合は、
name = 'Taro'
とします。
4. インデントの間違い
Pythonではインデントが重要です。
たとえば、
if x == 10:
print("10です")
では、print()がif文のブロックとして適切にインデントされていません。
正しくは、
if x == 10:
print("10です")
です。
ただし、ここで注意したいのが、インデントに関するエラーは必ずしもSyntaxErrorとは限らないことです。
たとえば、インデントの不整合では、
IndentationError
や
TabError
が発生することがあります。
つまり、インデントがおかしい=必ずSyntaxErrorというわけではありません。
5. Pythonの予約語を変数名に使っている
Pythonには、特別な意味を持つキーワードがあります。
たとえば、
if
else
for
while
class
def
return
import
などです。
これらを変数名として使うことはできません。
たとえば、
class = 10
とするとSyntaxErrorになります。
classはPythonでクラスを定義するときに使うキーワードだからです。
変数名を変更しましょう。
class_name = 10
6. カンマや括弧などの記号が間違っている
Pythonでは、記号の位置を間違えることでもSyntaxErrorが発生します。
たとえばリストの場合、
numbers = [1 2 3]
は正しくありません。
要素の間にカンマが必要です。
numbers = [1, 2, 3]
辞書の場合も同様です。
person = {"name": "Taro", "age": 20}
のように、キーと値、要素の区切りを正しく記述する必要があります。
SyntaxErrorのエラーメッセージを読む方法
SyntaxErrorが発生すると、Pythonはエラーメッセージを表示します。
たとえば、
File "sample.py", line 3
if x == 10
^
SyntaxError: expected ':'
この場合、重要なのは以下の部分です。
File "sample.py", line 3
これは、
sample.pyの3行目付近で問題が発生した
という意味です。
さらに、
SyntaxError: expected ':'
とあります。
これは、
:が必要です
という意味です。
したがって、コードを確認すると、
if x == 10
となっているので、
if x == 10:
に修正できます。
「^」の位置にも注目する
SyntaxErrorでは、エラー箇所を示すために^が表示されることがあります。
たとえば、
if x == 10
^
SyntaxError: expected ':'
この^は、Pythonが構文上問題を検出した位置を示しています。
ただし、^の真上だけが必ず原因とは限りません。
たとえば括弧の閉じ忘れなどでは、実際の原因が少し前の行にあることもあります。
そのため、
-
エラーが出た行を見る
-
その前の行も確認する
-
括弧やクォーテーションの対応を確認する
という手順で調べるとよいでしょう。
SyntaxErrorが出たときの解決方法
SyntaxErrorが発生した場合は、次の順番で確認すると効率的です。
STEP1:エラーが発生した行を確認する
まず、
line 10
などと表示されている行番号を確認します。
その行のコードを確認しましょう。
STEP2:その前後の行を確認する
SyntaxErrorは、表示された行そのものではなく、直前の行が原因になっている場合もあります。
特に以下を確認します。
-
(と) -
[と] -
{と} -
'と' -
"と" -
:の付け忘れ -
,の付け忘れ
STEP3:エラーメッセージを読む
たとえば、
SyntaxError: invalid syntax
だけでは原因がわかりにくい場合があります。
一方、
SyntaxError: expected ':'
なら、:が必要だと判断できます。
エラーメッセージは単なる警告ではなく、問題を解決するためのヒントです。
「invalid syntax」と表示された場合
Pythonでよく見るSyntaxErrorの一つが、
SyntaxError: invalid syntax
です。
これは、
Pythonの構文として正しくありません
という意味です。
たとえば、
if x == 10
print(x)
では:がないため、
SyntaxError: invalid syntax
などが表示されることがあります。
ただし、invalid syntaxだけでは具体的な原因がわからないこともあります。
その場合は、エラーが表示された行だけでなく直前の行も確認することが重要です。
SyntaxErrorとNameErrorの違い
PythonにはSyntaxError以外にもさまざまなエラーがあります。
たとえばNameErrorです。
SyntaxError
if x == 10
print(x)
Pythonの文法そのものが間違っています。
NameError
print(name)
nameという変数が定義されていなければ、
NameError: name 'name' is not defined
となります。
つまり、
SyntaxError:コードの書き方が間違っている
NameError:名前(変数など)が見つからない
という違いがあります。
SyntaxErrorとTypeErrorの違い
TypeErrorもPythonで頻繁に発生するエラーです。
たとえば、
number = 10
text = "20"
print(number + text)
これは整数と文字列をそのまま足しているため、
TypeError
になります。
一方、
if number == 10
のようにPythonの文法が間違っている場合は、
SyntaxError
です。
簡単に整理すると、
| エラー | 主な原因 |
|---|---|
| SyntaxError | 文法・構文が間違っている |
| NameError | 変数名などが定義されていない |
| TypeError | データ型の使い方が不適切 |
| ValueError | 値が適切ではない |
| IndexError | インデックスが範囲外 |
| KeyError | 辞書に存在しないキーを指定 |
となります。
SyntaxErrorは実行前に発生する
SyntaxErrorの大きな特徴は、Pythonのコードを正常に実行できる状態になる前に検出されることです。
たとえば、
print("Hello")
if x == 10
print("10")
では、後半に構文エラーがあります。
そのためPythonはプログラムを正常に実行できません。
これは、
「処理を実行した結果、問題が発生した」
というタイプのエラーとは異なります。
まずPythonの文法としてコードを解釈できる状態にする必要があります。
SyntaxErrorを防ぐポイント
SyntaxErrorを完全になくすことは難しいですが、以下を意識すると減らせます。
1. コードを少しずつ実行する
一度に大量のコードを書くのではなく、少し書いたら実行して確認します。
name = "Taro"
print(name)
問題がなければ次の処理を追加します。
これによって、どこでSyntaxErrorが発生したのかを特定しやすくなります。
2. エディタの補完機能を利用する
VS Codeなどのコードエディタを使うと、括弧やクォーテーションの入力をサポートしてくれます。
たとえば、
print(
と入力すると、環境によっては自動的に
print()
のように補完されます。
3. Pythonのコード規約を意識する
Pythonでは、読みやすいコードを書くためのスタイルガイドとしてPEP 8があります。
インデントや命名規則などを統一することで、コードのミスを発見しやすくなります。
SyntaxErrorは初心者だけのエラーではない
SyntaxErrorはPython初心者が遭遇しやすいエラーですが、経験豊富なプログラマーでも発生することがあります。
特に、
-
複雑な条件式
-
長い関数
-
ネストの深いコード
-
辞書やリストが大量に並ぶコード
-
SQLやJSONをPythonコードに埋め込む処理
などでは、括弧やクォーテーションのミスが起こりやすくなります。
また、コードをコピー&ペーストしたときに、全角記号が混ざってSyntaxErrorになるケースもあります。
PythonのSyntaxErrorを解決するときのチェックリスト
SyntaxErrorが発生したら、以下を順番にチェックしてみましょう。
SyntaxErrorチェックリスト
-
エラーが発生した行を確認した
-
直前の行を確認した
-
:を付け忘れていない -
()の対応を確認した -
[]の対応を確認した -
{}の対応を確認した -
'や"を閉じている -
インデントが正しい
-
Pythonの予約語を変数名にしていない
-
カンマを付け忘れていない
-
全角記号が混ざっていない
-
エラーメッセージを確認した
このチェックリストを使うだけでも、多くのSyntaxErrorを解決できます。
SyntaxErrorを理解することはPython学習で重要
Pythonを学習していると、最初のうちはSyntaxErrorが頻繁に発生します。
しかし、SyntaxErrorは「難しいエラー」というより、Pythonの文法を覚えるためのヒントと考えることができます。
たとえば、
SyntaxError: expected ':'
なら、
「ここには
:が必要なんだ」
と覚えられます。
同じように、
SyntaxError: invalid syntax
が出たら、
「Pythonとして正しい構文になっているか確認しよう」
と考えればよいでしょう。
エラーを恐れるのではなく、エラーメッセージを読んで原因を特定する習慣を身につけることが、Python上達への近道です。
まとめ:SyntaxErrorはPythonの文法エラー
SyntaxErrorは、Pythonの構文・文法が正しくない場合に発生するエラーです。
特に初心者の場合は、以下のミスがよくあります。
-
:の付け忘れ -
括弧の閉じ忘れ
-
クォーテーションの閉じ忘れ
-
インデントの間違い
-
予約語を変数名に使用
-
カンマなどの記号の付け忘れ
-
全角記号の混入
SyntaxErrorが発生したら、まずエラーが表示された行と、その直前の行を確認することがポイントです。
そして、
SyntaxError: invalid syntax
のようなエラーメッセージを単に無視するのではなく、エラーの内容を読み取る習慣をつけましょう。
Python初心者にとってSyntaxErrorは避けて通れないエラーですが、何度も原因を確認していくうちに、自然とPythonの文法が身についていきます。
「エラーが出た=失敗」ではなく、「Pythonの文法を学ぶチャンス」と考えることが大切です。


