PyQオフィシャルブログ

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

SyntaxError: SyntaxError EOL while scanning string literalの読み解き方と解決方法を紹介します。

f:id:nana_yu:20181106120932p:plain

こんにちは。PyQチームのnao_yです。

このPythonお悩み解決では、SyntaxErrorの原因とエラーの読み解き方を紹介します。

SyntaxErrorとは?

SyntaxErrorはプログラムがPythonの文法として正しくないときに発生するエラーです。

今回は文字列を表現するときに起こるエラーに焦点を当てます。

エラー例

文字列を定義するときにこのようなエラーが起きたことはないでしょうか?

# sample.py
text = 'Hello, Python!
print(text)

  File "sample.py", line 2
    text = 'Hello, Python!
                         ^
SyntaxError: EOL while scanning string literal

エラーメッセージ

文字列の定義に文法ミスがあるときはSyntaxError: EOL while scanning string literal というエラーメッセージが表示されます。

このメッセージを訳すと「文字列リテラルをスキャンしている間に行末が来てしまった」という意味になります。

文字列リテラルとはどういうものなのでしょうか。

文字列リテラル

文字列リテラルとは、シングルクォート'やダブルクォート"で括られた文字列のことを指します。

string_literal1 = 'Python'
string_literal2 = "PyQ"

エラーを読み解こう

以下がエラーがあるコードです。

# sample.py
text = 'Hello, Python!
print(text)

文字列がシングルクォート'で閉じられていないことがエラーの原因ですが、エラーメッセージの意味と合わせて考えてみましょう。

エラーメッセージの意味は文字列リテラルをスキャンしている間に行末が来てしまったということでした。

Pythonはプログラムを左から右へ読み込んで、処理を解釈します。

このコードが正しく書かれていた場合の解釈は以下のようになります。

  1. Pythonがコードを解釈する
  2. 変数textを作る
  3. 文字列リテラルを順に読み込む
  4. 文字列リテラル 'Hello, Python!' を変数textに代入する
  5. 変数textを表示する

f:id:nao_y_py:20181005174621p:plain

Pythonはまず人間が書いたコード全体を解釈します。これが1番の処理です。SyntaxErrorはこの段階で発生するエラーです。

このとき、文字列リテラルの開始を見つけると行末まで対応する記号(シングルクォートまたはダブルクォート)を探します。 行末まで記号が見つからない場合にSyntaxError: EOL while scanning string literal というエラーが発生します。

f:id:nao_y_py:20181009112742p:plain

シングルクォートで始まった文字列リテラルはシングルクォートで閉じなければならないので、シングルクォートとダブルクォートが混じった文字列リテラルも同様のエラーになります。

text = 'Hello, Python!"

文字列リテラルの定義に使う記号(シングルクォートまたはダブルクォート)は必ず統一しましょう。

Copyright ©2017-2018 BeProud Inc. All rights reserved.