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

Pythonでプログラムを書いていると、次のようなエラーが表示されることがあります。
SyntaxError: unterminated string literal
「unterminated string literal」は、文字列(string)が正しく終了していないという意味です。
特にPython初心者の場合、文字列を囲む ' や " の付け忘れ、途中での改行などが原因で発生することがあります。
この記事では、SyntaxError: unterminated string literal の意味から、よくある原因、具体的な修正方法までわかりやすく解説します。
SyntaxError: unterminated string literalとは?
SyntaxError: unterminated string literal は、Pythonの文字列リテラルが終了していないときに発生する構文エラーです。
例えば、次のコードを実行します。
print("Hello)
実行すると、次のようなエラーになります。
SyntaxError: unterminated string literal
"Hello) では、文字列の開始を示す " はありますが、終了を示す " がありません。
正しくは次のように記述します。
print("Hello")
つまり、
"Hello
ではなく、
"Hello"
のように、文字列の開始と終了を対応させる必要があります。
unterminated string literalの意味
エラーメッセージを分解すると理解しやすくなります。
| 英語 | 意味 |
|---|---|
| SyntaxError | 構文エラー |
| unterminated | 終了していない |
| string | 文字列 |
| literal | リテラル |
したがって、
SyntaxError: unterminated string literal
は、
終了していない文字列リテラルがあります
という意味です。
Pythonがコードを解析したときに、文字列の終わりを示す引用符を見つけられなかったため、プログラムを実行できません。
SyntaxError: unterminated string literalの原因
主な原因は次のとおりです。
-
引用符の閉じ忘れ
-
シングルクォートとダブルクォートの組み合わせミス
-
文字列の途中で改行している
-
文字列内の引用符の扱いが間違っている
-
前の行の文字列が終了していない
順番に見ていきましょう。
1. 引用符を閉じ忘れている
最も多い原因です。
例えば、
name = "Taro
というコードでは、文字列の開始位置に " があります。
しかし、最後に " がありません。
そのため、
SyntaxError: unterminated string literal
が発生します。
修正方法
終了する位置に " を追加します。
name = "Taro"
これでエラーは解消します。
2. シングルクォートとダブルクォートが対応していない
Pythonでは文字列を、
'Hello'
または、
"Hello"
のように記述できます。
ただし、開始と終了の引用符を対応させる必要があります。
例えば、
name = 'Taro"
は間違いです。
開始が ' なのに、終了が " になっています。
正しくは、
name = 'Taro'
または、
name = "Taro"
です。
3. 文字列の途中で改行している
Pythonでは、通常の文字列を途中で改行することはできません。
例えば、
message = "Hello
World"
とすると、SyntaxError が発生します。
文字列を複数行にしたい場合は、三重引用符を使用できます。
message = """Hello
World"""
または、
message = '''Hello
World'''
とします。
4. 文字列内の引用符を間違えている
次のようなコードもエラーの原因になります。
print("He said "Hello"")
Pythonから見ると、
"He said "
で一度文字列が終了したように解釈されます。
その後の Hello などが正しく解釈できなくなります。
修正方法1:引用符を使い分ける
外側をシングルクォートにします。
print('He said "Hello"')
修正方法2:エスケープする
ダブルクォートをエスケープする方法もあります。
print("He said \"Hello\"")
バックスラッシュにも注意
文字列の最後にバックスラッシュ \ がある場合も注意が必要です。
例えば、
path = "C:\"
は、最後の \ によって引用符がエスケープされたように解釈されるため、文字列が正しく終了しません。
Windowsのパスを扱う場合は、例えば次のようにします。
path = "C:\\"
またはraw文字列を利用します。
path = r"C:\"
ただし、raw文字列でも末尾を単一のバックスラッシュにすることはできません。
そのため、次のようなパスでは注意が必要です。
path = r"C:\Users\"
この場合は、
path = "C:\\Users\\"
などのように記述します。
エラーが表示された行だけを確認してはいけない
SyntaxError: unterminated string literal が発生した場合、エラーメッセージに表示された行だけでなく、その直前の行も確認することが重要です。
例えば、
message = "Hello
print("Python")
とします。
Pythonが問題を検出する場所によっては、print("Python") の行がエラー箇所として表示されることがあります。
しかし、本当の原因は前の行です。
message = "Hello
で文字列を閉じ忘れています。
そのため、
エラーが表示された行の前後を確認する
ことがポイントです。
SyntaxError: unterminated string literalの修正手順
エラーが発生した場合は、次の手順で確認すると効率的です。
STEP1:エラーが発生した行を確認する
例えば、
File "sample.py", line 3
message = "Hello
^
SyntaxError: unterminated string literal
と表示された場合、3行目付近を確認します。
STEP2:' と " を確認する
文字列の開始と終了が対応しているか確認します。
"Hello"
なら問題ありません。
一方、
"Hello
なら終了の " がありません。
STEP3:前の行も確認する
エラーが表示された行そのものが原因とは限りません。
特に、
message = "Hello
print(message)
のようなコードでは、前の行の文字列が閉じていないことが原因です。
STEP4:文字列内の引用符を確認する
例えば、
print("He said "Hello"")
のようなコードがないか確認します。
必要に応じて、
print('He said "Hello"')
または、
print("He said \"Hello\"")
に修正します。
よくある間違いと正しいコード
間違い1:終了の引用符がない
NG
text = "Python
OK
text = "Python"
間違い2:引用符の種類が違う
NG
text = 'Python"
OK
text = 'Python'
間違い3:複数行文字列をそのまま改行する
NG
text = "Python
is
easy"
OK
text = """Python
is
easy"""
間違い4:文字列の中で同じ引用符を使う
NG
text = "Python is "easy""
OK
text = 'Python is "easy"'
または、
text = "Python is \"easy\""
f-stringでも発生する
f-stringを使っている場合も、引用符の閉じ忘れには注意が必要です。
例えば、
name = "Taro"
message = f"Hello, {name}
では、最後の " がありません。
正しくは、
name = "Taro"
message = f"Hello, {name}"
です。
シングルクォートとダブルクォートはどちらを使う?
Pythonでは、
'Python'
と、
"Python"
のどちらも文字列として利用できます。
重要なのは、開始と終了を同じ種類の引用符にすることです。
例えば、
'Python'
や、
"Python"
は正しいコードです。
プロジェクト内で表記を統一しておくと、引用符のミスも減らせます。
SyntaxError: unterminated string literalと他のSyntaxErrorの違い
Pythonにはさまざまな構文エラーがあります。
| エラー | 主な原因 |
|---|---|
SyntaxError: unterminated string literal |
文字列が終了していない |
SyntaxError: invalid syntax |
Pythonの構文が正しくない |
SyntaxError: expected ':' |
: が必要な場所にない |
SyntaxError: '(' was never closed |
( が閉じられていない |
SyntaxError: incomplete input |
入力されたコードが不完全 |
例えば、
if x > 10
なら、
SyntaxError: expected ':'
が発生します。
一方、
name = "Taro
なら、
SyntaxError: unterminated string literal
です。
どちらもSyntaxErrorですが、原因は異なります。
エラーを防ぐためのポイント
SyntaxError: unterminated string literalを防ぐには、次のポイントを意識しましょう。
1. 引用符を必ずペアで使う
"Python"
のように、開始と終了をセットで記述します。
2. エディタの構文ハイライトを活用する
VS Codeなどのエディタでは、文字列が色分けされます。
引用符を閉じ忘れると、その後のコードまで文字列として表示されることがあります。
このような表示になったら、引用符の閉じ忘れを疑いましょう。
3. 長い文字列は慎重に扱う
長い文章を直接コードに書く場合は、引用符の対応を確認します。
複数行なら、
text = """長い文章
複数行の文章
を記述します。"""
のように三重引用符を使うと便利です。
まとめ
SyntaxError: unterminated string literalは、Pythonの文字列が正しく終了していないときに発生するSyntaxErrorです。
特に多い原因は、次の4つです。
-
'や"の閉じ忘れ -
引用符の種類が一致していない
-
文字列の途中で改行している
-
文字列内の引用符の扱いを間違えている
例えば、
name = "Taro
は間違いで、
name = "Taro"
とすれば解決できます。
また、エラーが表示された行だけではなく、直前の行に文字列の閉じ忘れがないか確認することも重要です。
SyntaxError: unterminated string literalを見たら、まずは文字列を囲んでいる ' と " がきちんと対応しているかを確認しましょう。
他のPythonエラーはPythonエラー一覧と対処法に種類別でまとめています。





