Python学習チャンネル by PyQ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

SyntaxError: unterminated string literal の読み解き方と解決方法を紹介します

f:id:Nutty55:20211108175709p:plain

こんにちは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では原因がわかりやすくなりました。

Copyright ©2017- BeProud Inc. All rights reserved.