SyntaxError: unexpected EOF while parsingの原因と対処法【Python】

Pythonでプログラムを書いていると、次のようなエラーが表示されることがあります。
SyntaxError: unexpected EOF while parsing
これは、Pythonがコードを解析している途中で、想定していなかったファイルの終端(EOF: End Of File)に到達したことを意味します。
特に、(、[、{、'、" などの閉じ忘れが原因になるケースが多いエラーです。
この記事では、SyntaxError: unexpected EOF while parsingの意味、主な原因、具体的な修正方法について、初心者向けに解説します。
SyntaxError: unexpected EOF while parsingとは
SyntaxError: unexpected EOF while parsingは、Pythonの構文エラー(SyntaxError)の一種です。
例えば、次のコードを実行します。
print(
すると、
SyntaxError: unexpected EOF while parsing
のようなエラーが発生します。
print(で開き括弧 ( を使っていますが、対応する ) がありません。
Pythonは、
print(
...
)
のように、閉じ括弧が続くことを期待していました。
しかし、プログラムの最後まで読んでも ) が見つからなかったため、「予想外にファイルが終わった」としてエラーになります。
EOFとは?
EOFは、
End Of File
の略です。
日本語では「ファイルの終端」「ファイルの終わり」などと表現します。
例えば、次のコードがあったとします。
message = "Hello
Pythonは、
message = "Hello"
のように文字列を閉じる " が必要だと考えます。
ところが、" がないままファイルが終了しています。
そのため、Pythonはコードを最後まで解析できず、
SyntaxError: unexpected EOF while parsing
となることがあります。
主な原因
SyntaxError: unexpected EOF while parsingの代表的な原因は次のとおりです。
-
括弧を閉じ忘れている
-
文字列のクォートを閉じ忘れている
-
複数行の構文が途中で終わっている
-
ifやforなどの処理を途中で終えている -
コードをコピーした際に一部が欠落している
順番に見ていきましょう。
原因1:括弧を閉じ忘れている
最もよくある原因の一つです。
例えば、
print("Hello"
と書いた場合です。
print(の ( はありますが、対応する ) がありません。
正しくは、
print("Hello")
です。
リストでも発生する
例えば、
numbers = [1, 2, 3
も同様です。
[を開いたまま閉じていません。
正しくは、
numbers = [1, 2, 3]
です。
辞書でも発生する
user = {"name": "Taro", "age": 20
の場合も、
user = {"name": "Taro", "age": 20}
のように } が必要です。
原因2:文字列のクォートを閉じ忘れている
文字列の閉じ忘れでもエラーが発生します。
例えば、
message = "Hello
では、文字列を開始する " はありますが、終了する " がありません。
正しくは、
message = "Hello"
です。
シングルクォートでも同様です。
message = 'Hello
ではなく、
message = 'Hello'
とします。
原因3:複数行の構文が途中で終わっている
Pythonでは、括弧を使って式を複数行に分けることができます。
例えば、
result = (
10 + 20
では、(を閉じていません。
正しくは、
result = (
10 + 20
)
です。
長いリストや関数呼び出しでも同じ問題が発生します。
result = some_function(
10,
20,
30
ではなく、
result = some_function(
10,
20,
30
)
とします。
原因4:if文などを途中で終えている
例えば、
if x > 10:
だけを書いてプログラムが終了すると、ifの後に実行する処理がありません。
通常は、
if x > 10:
print("10より大きい")
のように、インデントされた処理が必要です。
ただし、このケースではPythonのバージョンやコードの状況によって、unexpected EOFではなく別のSyntaxErrorが表示される場合もあります。
そのため、エラーメッセージだけでなく、エラーが発生した行の前後も確認することが重要です。
原因5:コードの一部が欠落している
Webサイトや資料などからPythonコードをコピーした場合、コードの一部が欠落していることがあります。
例えば本来、
if x > 10:
print("large")
else:
print("small")
となっているコードを途中までしかコピーし、
if x > 10:
print("large")
else:
としてしまうケースです。
この場合は、コード全体を確認して、不足している部分を補います。
エラーが発生した行だけを直せばいい?
必ずしもそうとは限りません。
例えば、
numbers = [
1,
2,
3
print(numbers)
というコードがあるとします。
一見すると、
print(numbers)
の行に問題があるように感じるかもしれません。
しかし、実際に問題なのはその前の、
numbers = [
です。
[を閉じる ] がありません。
正しくは、
numbers = [
1,
2,
3
]
print(numbers)
です。
このように、SyntaxErrorが示す行より前に原因があることがあります。
SyntaxError: unexpected EOF while parsingの対処法
エラーが発生した場合は、次の順番で確認すると効率的です。
1. エラーが発生した行を確認する
まず、エラーメッセージを確認します。
例えば、
File "sample.py", line 5
print(numbers)
^
SyntaxError: unexpected EOF while parsing
と表示された場合、5行目だけを見るのではなく、5行目より前のコードも確認します。
2. 括弧の対応を確認する
次の3種類を重点的にチェックします。
( )
[ ]
{ }
例えば、
result = (10 + 20
なら、
result = (10 + 20)
に修正します。
3. クォートの対応を確認する
次のような記号を確認します。
' '
" "
例えば、
name = "Taro
なら、
name = "Taro"
にします。
f-stringを使用している場合も注意が必要です。
print(f"名前は{name}です)
ではなく、
print(f"名前は{name}です")
とします。
4. インデントされた処理を確認する
if、for、while、def、classなどの後に処理が存在するか確認します。
例えば、
def hello():
だけで終わっている場合は、
def hello():
print("Hello")
のように処理を追加します。
Python 3ではエラーメッセージが異なる場合がある
SyntaxError: unexpected EOF while parsingは、Pythonのバージョンによっては別の表現になることがあります。
例えば、括弧の閉じ忘れでは、
SyntaxError: '(' was never closed
のようなメッセージが表示されることがあります。
これは、
(が閉じられていません
という意味です。
そのため、Pythonで「EOF」「was never closed」などのSyntaxErrorが表示された場合は、括弧やクォートの閉じ忘れを最初に確認するとよいでしょう。
SyntaxError: unexpected EOF while parsingと似たエラー
Pythonでは、構文の問題によって似たSyntaxErrorが表示されることがあります。
| エラー | 主な意味 |
|---|---|
SyntaxError: unexpected EOF while parsing |
解析中に予想外にファイルが終了した |
SyntaxError: '(' was never closed |
(が閉じられていない |
SyntaxError: incomplete input |
入力されたコードが不完全 |
SyntaxError: invalid syntax |
Pythonの構文として正しくない |
SyntaxError: unterminated string literal |
文字列が閉じられていない |
SyntaxError: expected ':' |
:が必要な場所にない |
特に、
unexpected EOF
と
incomplete input
は、コードが途中で終わっているという点で共通しています。
VS Codeで確認する方法
VS Codeなどのエディタを使用している場合、括弧の対応を確認できます。
例えば、
result = (
10 + 20
と入力すると、エディタ上で括弧の対応が分かりやすく表示されます。
また、Pythonの構文チェック機能を有効にしておくと、実行する前にエラーを発見できる場合があります。
Pythonコードを小さく分けて確認する
コードが長い場合は、一度に全部を確認するより、問題がありそうな部分を小さく切り分ける方法も有効です。
例えば、
data = [
10,
20,
30
]
result = sum(data)
print(result)
のようなコードでエラーが発生した場合、次のように一部分ずつ確認します。
data = [
10,
20,
30
]
次に、
result = sum(data)
そして、
print(result)
というように分けて確認すると、問題の箇所を特定しやすくなります。
まとめ
SyntaxError: unexpected EOF while parsingは、Pythonがコードを解析している途中で、予想外にファイルの終端(EOF)に到達したときに発生するSyntaxErrorです。
特に多い原因は、次のような閉じ忘れです。
print(
numbers = [1, 2, 3
message = "Hello
このようなコードでは、それぞれ、
print()
numbers = [1, 2, 3]
message = "Hello"
のように閉じる必要があります。
エラーが発生したときは、まず以下を確認しましょう。
-
(と)の対応 -
[と]の対応 -
{と}の対応 -
'と'の対応 -
"と"の対応 -
ifやfor、defなどの処理が途中で終わっていないか -
エラー行より前のコードに閉じ忘れがないか
「EOF=ファイルの終わり」と覚えておくと、エラーの意味を理解しやすくなります。
FAQ
Q1. SyntaxError: unexpected EOF while parsingの意味は?
Pythonがコードを解析している途中で、予想していなかったファイルの終端(EOF)に到達したという意味です。括弧やクォートなどの閉じ忘れが代表的な原因です。
Q2. 一番多い原因は何ですか?
(、[、{などの括弧の閉じ忘れや、文字列の'、"の閉じ忘れが代表的です。
Q3. エラーが表示された行が原因ですか?
必ずしもそうではありません。開いた括弧やクォートが閉じられていない場合、原因はエラーが表示された行より前にあることがあります。
Q4. unexpected EOFとincomplete inputは同じですか?
どちらもコードが不完全であることを示すケースがあります。ただし、Pythonのバージョンや具体的な構文によって表示されるエラーメッセージは異なります。
Q5. どうしても原因が分からない場合は?
エラーメッセージだけでなく、エラーが発生した行の前後20~30行程度を確認すると原因を見つけやすくなります。特に括弧とクォートの対応を確認しましょう。
他のPythonエラーはPythonエラー一覧と対処法に種類別でまとめています。




