Code Fix

初級

SyntaxError: unterminated string literal の原因と直し方

文字列を開いたクォートと同じ種類で閉じ忘れたときに出るエラーです。シングルクォートとダブルクォートを混在させたときにも起きます。

エラーメッセージの読み方

  File "main.py", line 1
main.py
ファイル名
1
行番号 — Pythonが構文解析を諦めた位置
SyntaxError
エラークラス — 実行前の構文チェックで検出されました
unterminated string literal (detected at line 1)
内容 — 期待していたもの、または見つけられなかったもの

このエラーが出る典型パターン

パターン1

 1  name = "Tom 
               ^
 2  print(name)
File "main.py", line 1 name = "Tom ^ SyntaxError: unterminated string literal (detected at line 1)

文字列は開いたクォートと同じ種類のクォートで閉じる必要があります。閉じ忘れると、どこまでが文字列かPythonは判断できません。

直し方: (空) を " にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  msg = 'hi 
             ^
 2  print(msg)
File "main.py", line 1 msg = 'hi ^ SyntaxError: unterminated string literal (detected at line 1)

シングルクォートで始めた文字列はシングルクォートで閉じます。ダブルクォートと混ぜることはできません。

直し方: (空) を ' にします。

この問題を解いてみる →

パターン3

 1  print("hello )
                ^
File "main.py", line 1 print("hello) ^ SyntaxError: unterminated string literal (detected at line 1)

閉じ括弧の前に閉じクォートを忘れると、文字列がそのまま続いていると解釈され、行末や次の記号まで巻き込まれます。

直し方: (空) を " にします。

この問題を解いてみる →

パターン4

 1  data = {"name": "Tom }
                        ^
 2  print(data)
File "main.py", line 1 data = {"name": "Tom} ^ SyntaxError: unterminated string literal (detected at line 1)

辞書の値であっても文字列の閉じクォートは省略できません。閉じ括弧}の前に閉じクォートが必要です。

直し方: (空) を " にします。

この問題を解いてみる →

パターン5

 1  greeting = "Good morning 
                            ^
 2  print(greeting)
File "main.py", line 1 greeting = "Good morning ^ SyntaxError: unterminated string literal (detected at line 1)

文字列が長くても規則は同じです。開いたダブルクォートと同じ種類で閉じる必要があります。

直し方: (空) を " にします。

この問題を解いてみる →

よくある誤解

クォートの種類を途中で変えても閉じられると思われがちですが、開いたときと同じ種類のクォートでなければ文字列は終わりません。

実務での勘所

文字列の中に元々の引用符と同じ種類の文字を含めたい場合や、複数行にまたがる文字列を書きたい場合は、引用符を1個ではなく3個連ねたトリプルクォート("""..."""や'''...''')を使うと、閉じ忘れや引用符の混在という問題自体を避けやすくなります。なお、raw文字列(r"...")はバックスラッシュのエスケープを無効にするだけで、引用符を閉じるルール自体は通常の文字列と同じです。「rを付ければ引用符の扱いも変わる」という誤解は禁物です。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)