こんにちはPyQサポートです。
このPythonお悩み解決では、SyntaxError: unterminated string literal
の原因とエラーの読み解き方を紹介します。
Python3.10.0先取り記事で紹介しましたようにPython3.10から、構文エラーの表現が改善されました。本記事は、SyntaxError: SyntaxError EOL while scanning string literalの読み解き方と解決方法を紹介しますの内容をPython3.10バージョンで再構築しています。
SyntaxError: unterminated string literal とは?
SyntaxError: unterminated string literal
はプログラムがPythonの文法として正しくないときに発生するエラーです。
今回は文字列を表現するときに起こるエラーを紹介します。
SyntaxError: unterminated string literal のエラー例
文字列を定義するときにこのようなエラーが起きたことはないでしょうか?
# sample.py text = 'Hello, Python! print(text)
File "sample.py", line 2 text = 'Hello, Python! ^ SyntaxError: unterminated string literal (detected at line 2)
SyntaxError: unterminated string literal の原因と解決方法
文字列の定義に文法ミスがあるときはSyntaxError: unterminated string literal
というエラーメッセージが表示されます。
このメッセージを訳すと「終了していない文字列リテラル」という意味になります。
文字列リテラルとはどういうものなのでしょうか。
文字列リテラル
文字列リテラルとは、シングルクォート'
やダブルクォート"
で括られた文字列のことを指します。
string_literal1 = 'Python' string_literal2 = "PyQ"
SyntaxError: unterminated string literal のエラー原因を読み解こう
以下が、エラーの原因コードです。
# sample.py text = 'Hello, Python! print(text)
文字列がシングルクォート'
で閉じられていないことがエラーの原因です。
補足
シングルクォートで始まった文字列リテラルはシングルクォートで閉じなければならないので、シングルクォートとダブルクォートが混じった文字列リテラルも同様のエラーになります。
>>> text = 'Hello, Python!" File "<stdin>", line 1 text = 'Hello, Python!" ^ SyntaxError: unterminated string literal (detected at line 1)
文字列リテラルの定義に使う記号(シングルクォートまたはダブルクォート)は必ず統一しましょう。
まとめ
PyQのエディターをはじめとして、多くのエディターにはシングルクォートやダブルクォートを入力すると終端側を補完する機能があります。とはいえ、プログラムを書いているときにうっかり閉じ忘れてエラーが出ることもあるかもしれません。
Python3.9までは、SyntaxError: SyntaxError EOL while scanning string literalの読み解き方と解決方法を紹介しますのようにエラーの原因が分かりづらかったですが、Python3.10では原因がわかりやすくなりました。