Code Fix

初級

文字列の閉じクォート忘れによる SyntaxError

文字列を囲むクォートの片方を書き忘れると、それ以降のコードすべてが文字列の中身として読み込まれ続け、閉じクォートが見つからないままエラーになります。

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

main.rb:2: unterminated string meets end of file (SyntaxError)
main.rb
ファイル名
2
行番号 — Rubyが構文解析を諦めた位置
SyntaxError
エラー種別 — 実行前の構文チェックで検出されました
unterminated string meets end of file
内容 — 期待していたもの、または見つけられなかったもの

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

パターン1

 1  greeting = "Good morning  
                             ^
 2  puts greeting
main.rb:2: unterminated string meets end of file (SyntaxError) puts greeting ^

文字列を開いたクォートは、閉じるまでずっと文字列の中身として読み込まれ続けます。改行を挟んでも同じです。

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

この問題を解いてみる →

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

パターン2

 1  title = "Ruby Guide  
                        ^
 2  puts title.length
main.rb:2: unterminated string meets end of file (SyntaxError) puts title.length ^

閉じクォートが無いと、次の行のコードまで文字列の一部として飲み込まれ、ファイルの終わりでエラーになります。

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

この問題を解いてみる →

パターン3

 1  message = "Task complete  
                             ^
 2  puts message
main.rb:2: unterminated string meets end of file (SyntaxError) puts message ^

エラーが指す行は文字列が始まった行ではなく、Rubyが読み込みを諦めた行です。直すべきは文字列が始まった行のクォートです。

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

この問題を解いてみる →

パターン4

 1  note = "Meeting notes  
                          ^
 2  puts note.length
main.rb:2: unterminated string meets end of file (SyntaxError) puts note.length ^

文字列リテラルは開始と終了のクォートが1対1で対応していないと、構文として成立しません。

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

この問題を解いてみる →

パターン5

 1  label = "Final version  
                           ^
 2  puts label.upcase
main.rb:2: unterminated string meets end of file (SyntaxError) puts label.upcase ^

クォートを閉じ忘れると、以降の行がどんどん文字列に取り込まれ、思わぬところでエラーになります。

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

この問題を解いてみる →

よくある誤解

エラーが指す行にクォートを足しても直らないことがあります。本当に直すべきは、文字列が始まった行の閉じクォートです。

まとめ

文字列の閉じクォート忘れによる SyntaxErrorは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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