Pythonの「SyntaxError: incomplete input」の原因と対処法|入力が途中で終わっているときの解決方法

Pythonでプログラムを実行していると、次のようなエラーが表示されることがあります。
SyntaxError: incomplete input
SyntaxErrorは、Pythonの文法(構文)に問題があることを示すエラーです。
この記事では、SyntaxError: incomplete inputの意味、主な原因、具体的な修正方法について、初心者にもわかりやすく解説します。
SyntaxError: incomplete inputとは?
SyntaxError: incomplete inputは、Pythonのコードが途中で終わっていて、文法を完成させるために必要な入力が不足しているときに発生するエラーです。
例えば、次のコードを実行するとします。
print(
実行すると、
SyntaxError: incomplete input
のようなエラーになります。
これは、print(で開いた丸括弧 ( を閉じる ) がないためです。
正しくは、
print()
とします。
つまり、このエラーが出た場合は、
「Pythonから見ると、まだコードが続くはずなのに入力が終わっている」
と考えるとわかりやすいでしょう。
SyntaxError: incomplete inputの主な原因
SyntaxError: incomplete inputの代表的な原因は次のとおりです。
-
括弧を閉じ忘れている
-
文字列のクォートを閉じ忘れている
-
ifやforなどのブロックが途中で終わっている -
関数定義が途中で終わっている
-
辞書やリストなどの記述が途中で終わっている
-
Pythonの対話モードで入力を途中で終了している
順番に見ていきましょう。
括弧を閉じ忘れている
もっともよくある原因の一つが、括弧の閉じ忘れです。
例えば、
numbers = [1, 2, 3
とすると、[に対応する]がありません。
正しくは、
numbers = [1, 2, 3]
です。
同様に、丸括弧や波括弧でも発生します。
丸括弧
print("Hello"
↓
print("Hello")
波括弧
data = {"name": "Taro"
↓
data = {"name": "Taro"}
コードが長くなると、括弧の対応関係を見落としやすくなります。
文字列のクォートを閉じ忘れている
文字列を作るときの ' や " を閉じ忘れても、入力が不完全になります。
例えば、
name = "Python
というコードです。
"で文字列を開始していますが、最後に閉じる"がありません。
正しくは、
name = "Python"
です。
シングルクォートの場合も同じです。
name = 'Python
↓
name = 'Python'
if文の途中でコードが終わっている
if文などのブロック構文では、条件式の後に処理を記述する必要があります。
例えば、
if x > 10:
だけでコードが終了している場合です。
if文には、その条件が成立したときに実行する処理が必要です。
例えば、
if x > 10:
print("10より大きい")
とします。
ただし、Pythonのバージョンや実行環境によって表示されるエラーメッセージが異なる場合があります。
for文が途中で終わっている
for文も同様です。
例えば、
for i in range(10):
だけで入力が終了すると、ループの中身がありません。
正しくは、
for i in range(10):
print(i)
のように、インデントされた処理を記述します。
関数定義が途中で終わっている
関数を定義するときも注意が必要です。
例えば、
def hello():
だけでコードが終了しているケースです。
関数の中身がないため、コードとして不完全です。
例えば次のようにします。
def hello():
print("Hello")
処理をまだ書いていない場合は、passを使うこともできます。
def hello():
pass
リストや辞書の記述が途中で終わっている
リストや辞書などのデータ構造でも、閉じ括弧を忘れるとエラーになります。
例えば、
fruits = [
"apple",
"banana",
"orange"
この場合、[に対応する]がありません。
正しくは、
fruits = [
"apple",
"banana",
"orange"
]
です。
辞書も同様です。
person = {
"name": "Taro",
"age": 20
↓
person = {
"name": "Taro",
"age": 20
}
Pythonの対話モードで発生する場合
SyntaxError: incomplete inputは、Pythonの対話モード(REPL)を使っているときにも発生します。
例えばターミナルで、
python
を実行すると、次のような状態になります。
>>>
ここで、
print(
と入力すると、Pythonはまだ入力が続くと判断します。
閉じ括弧がないため、入力が不完全です。
コードを複数行に分けて入力している場合も、括弧やブロックの対応関係を確認しましょう。
SyntaxError: incomplete inputの解決方法
エラーが発生した場合は、次の順番で確認すると効率的です。
1. エラーが発生した行を確認する
まずエラーメッセージに表示されている行を確認します。
例えば、
File "sample.py", line 5
print(
^
SyntaxError: incomplete input
と表示された場合、5行目付近を確認します。
ただし、エラーの原因が必ずしも表示された行だけにあるとは限りません。
その前の行で括弧やクォートを閉じ忘れている可能性もあります。
2. 括弧の対応を確認する
次の3種類を確認します。
( )
[ ]
{ }
例えば、
result = calculate(
10,
20
であれば、
result = calculate(
10,
20
)
のように閉じ括弧を追加します。
3. クォートの対応を確認する
次のようなコードがないか確認します。
message = "Hello
"が閉じられていません。
正しくは、
message = "Hello"
です。
複数行の文字列を使用する場合は、トリプルクォートも確認します。
message = """
Hello
Python
"""
"""の閉じ忘れにも注意してください。
4. if・for・while・defなどを確認する
次のような構文を途中で終わらせていないか確認します。
if condition:
for item in items:
while condition:
def function():
これらには通常、その後にインデントされた処理が必要です。
例えば、
if condition:
print("OK")
とします。
エディタの構文チェックを活用する
SyntaxError: incomplete inputを防ぐには、コードエディタの構文チェック機能を利用するのも有効です。
例えば、Visual Studio Codeなどのエディタでは、括弧やクォートの対応を確認しやすくなっています。
また、コードを整形するフォーマッターを利用することで、構文上の問題を発見しやすくなる場合があります。
よくある間違い
間違い1:括弧が1つ足りない
print("Hello"
修正
print("Hello")
間違い2:リストを閉じていない
numbers = [1, 2, 3
修正
numbers = [1, 2, 3]
間違い3:辞書を閉じていない
data = {
"name": "Taro",
"age": 20
修正
data = {
"name": "Taro",
"age": 20
}
間違い4:関数の処理がない
def hello():
修正
def hello():
print("Hello")
または、
def hello():
pass
「SyntaxError: incomplete input」と「SyntaxError: invalid syntax」の違い
どちらもSyntaxErrorですが、意味は少し異なります。
| エラー | 主な意味 |
|---|---|
SyntaxError: incomplete input |
コードが途中で終わっていて不完全 |
SyntaxError: invalid syntax |
Pythonの文法として正しくない |
SyntaxError: expected ':' |
:が必要な場所にない |
SyntaxError: '(' was never closed |
(を閉じていない |
incomplete inputの場合は、特に「何かを書き忘れていないか」を確認することが重要です。
SyntaxError: incomplete inputを見つけるチェックリスト
エラーが発生したら、次の項目を確認してみましょう。
-
(と)の数が合っている -
[と]の数が合っている -
{と}の数が合っている -
'や"を閉じている -
"""を閉じている -
if文に処理がある -
for文に処理がある -
while文に処理がある -
defの中に処理がある -
エラー行だけでなく、その前の行も確認する
まとめ
SyntaxError: incomplete inputは、Pythonのコードが途中で終わっており、構文が完成していない場合に発生するエラーです。
特に多い原因は、
print(
のような括弧の閉じ忘れや、
name = "Python
のようなクォートの閉じ忘れです。
また、
if x > 10:
や、
def hello():
のように、ブロック構文の途中でコードが終了している場合も確認しましょう。
エラーが出たら、まずエラー行とその直前のコードを確認し、「括弧・クォート・ブロックが最後まで閉じられているか」をチェックするのがポイントです。
他のPythonエラーの原因と対処法はPythonエラー一覧と対処法に種類別でまとめています。エラーメッセージの読み方もあわせて解説しています。



