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の代表的な原因は次のとおりです。

  1. 括弧を閉じ忘れている

  2. 文字列のクォートを閉じ忘れている

  3. 複数行の構文が途中で終わっている

  4. ifやforなどの処理を途中で終えている

  5. コードをコピーした際に一部が欠落している

順番に見ていきましょう。


原因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エラー一覧と対処法に種類別でまとめています。

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら