ご存知のとおり、Python のようなプログラミング言語はインタープリタ型言語であり、プログラム全体を低レベル コードに完全に変更するのではなく、コードのすべてのブロックまたは行が 1 つずつ処理されることを本質的に意味します。
Python のインタプリタがコード行をスキャンし、何か例外的なものを発見すると、構文エラーと呼ばれるエラーが発生します。一般に、括弧の欠落、終了引用符の欠落、および構文内のその他の基本的な異常が、エラーが発生する原因です。
次のチュートリアルでは、EOL として知られる Python の構文エラーの 1 つを発見します。これは通常、文字列リテラルをスキャンしようとすると発生します。
EOLの意味を理解する
問題を解決する前に、EOL の意味を効果的に理解する必要があります。 EOL は「End of Line」の略です。 EOL エラーは、Python のインタープリターが文字列リテラルをスキャン中に行の終わりに到達したことを示します。
文字列リテラル (定数とも呼ばれます) は、一重引用符または二重引用符で囲む必要があります。スキャンしようとしたときに「行末」に到達したということは、文字列の最後の文字に到達し、最後の引用符に遭遇していないことを意味します。
EOL エラーがどのように発生するかを示す基本的な例を考えてみましょう。
例:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
出力:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal, and it is broken... ^ SyntaxError: EOL while scanning string literal
説明:
上記のコード スニペットでは、文字列リテラルを定義しました。ただし、文字列の末尾に引用符がありませんでした。 構文エラー ユーザーにその文字列を出力するときに EOL が呼び出されました。
出力セクションでは、文字列の最後の文字を指す小さな矢印が確認できます。これは、プログラムがステートメントのそのセグメントを解析しようとしたときにエラーが発生したことを示しています。
問題を理解したので、Python コードの実行中にこのエラーが発生する可能性があるいくつかの例を理解しましょう。
「構文エラー: 文字列リテラルのスキャン中に EOL が発生しました。」を修正しました。
Python プログラムの作業中に、主に 4 つの状況でこのエラーが発生する可能性があります。これら 4 つの主な状況は次のとおりです。
- 終了引用符がありません
- 間違った終了引用符の使用
- 複数行に拡張された文字列定数
- 終了引用符の前にバックスラッシュを使用する
これらのそれぞれの状況を理解し、回避策を試してみましょう。
終了引用符がありません
前のコード スニペットで説明したように、Python インタープリターは、文字列リテラルの末尾に到達し、引用符が欠落していることを検出すると、構文エラーを生成します。
例:
# defining a string value my_string = 'This is my string literal, and it is broken... # printing the string value print('String:', my_string)
説明:
リテラル文字列の末尾の引用符が欠落していることがわかりますが、これも構文エラーの正当性を示しています。どの言語にも構文に関する基本的なルールがほとんどなく、違反するとエラーが発生します。
上記の問題の解決策として、次の構文を考えてみましょう。
解決:
# defining a string value my_string = 'This is my string literal, and it is broken...' # printing the string value print('String:', my_string)
出力:
String: This is my string literal, and it is broken...
説明:
上記のコードの断片では、リテラル文字列の末尾に引用符が含まれていることがわかります。その結果、構文エラーが発生することなく、文字列がユーザーに正常に出力されます。
間違った終了引用符の使用
活用できるのは、 「」 同様に 「」 Pythonで特定の文字列定数を囲むために。ただし、プログラマは文字列値の末尾に誤った引用符を使用することがよくあります。このような状況により、プログラムは EOL に関して構文エラーを発生させます。
次の例でそのような状況を考えてみましょう。
例:
# defining a string value my_string = 'This is my string literal with wrong quotation mark at the end.' # printing the string value print('String:', my_string)
出力:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal with wrong quotation mark at the end.' ^ SyntaxError: EOL while scanning string literal
説明:
上記のコード スニペットでは、文字列値の末尾に間違った引用符が使用されているため、構文エラーが発生します。
このような問題は、次のコード スニペットに示すように、文字列の末尾に対応する引用符を使用することで回避できます。
解決:
# defining a string value my_string = 'This is my string literal with wrong quotation mark at the end.' # printing the string value print('String:', my_string)
出力:
String: This is my string literal with wrong quotation mark at the end.
説明:
上記のコード スニペットでは、見てわかるように、EOL エラーを回避するために文字列の末尾に一致する引用符を使用しています。
複数行に拡張された文字列定数
初心者の Python プログラマーの中には、ステートメントを複数行に拡張するという間違いを犯す人がいます。 C++ や Java などの他の言語とは異なり、Python はステートメントの終わりとして改行を考慮します。 「;」 ステートメントの終わりとして。
同じ問題を示す例を考えてみましょう。
問題の例:
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
出力:
File 'D:Python ernarypy.py', line 2 my_string = 'This is my string literal... ^ SyntaxError: EOL while scanning string literal
説明:
ハッシュマップ
上記のコードの断片では、コードが普通に見えるかもしれないことがわかります。ただし、次の行が始まるとすぐに、Python インタプリタはそのステートメントを終了し、文字列定数が囲まれていないため構文エラーが発生します。
ただし、以下に示すように、さまざまな方法を使用してこの問題を解決できます。
解決策 1: ' ' を使用して文字列定数に改行の効果を与える
# defining a string value my_string = 'This is my string literal... this is my new line' # printing the string value print('String:', my_string)
出力:
String: This is my string literal... this is my new line
説明:
上記のコード スニペットには、 ' ' 文字列定数に追加して改行の効果を与えます。その結果、文字列定数によりステートメントが複数行に分割されます。
次に、別の解決策を考えてみましょう。
解決策 2: 三重引用符、'''' または '''' を使用して複数行の文字列定数を格納する
# defining a string value my_string = '''This is my string literal... this is my new line''' # printing the string value print('String:', my_string)
出力:
String: This is my string literal... this is my new line
説明:
上記のコード スニペットでは、三重引用符を使用しています。 「」 複数行の文字列定数を保存するため。
終了引用符の前にバックスラッシュを使用する
バックスラッシュ 「」 文字列をエスケープする責任があり、構文エラーが発生します。
次の例を考えてみましょう。
例:
# storing a directory path my_string = 'D:PythonMy_Folder' # printing the string value print('String:', my_string)
出力:
File 'D:Python ernarypy.py', line 2 my_string = 'D:PythonMy_Folder' ^ SyntaxError: EOL while scanning string literal
説明:
上記のコード スニペットでは、バックスラッシュを使用しています。 「」 フォルダーのパスを互いに分離するため。ただし、プログラムの実行中に、Python インタープリターによって構文エラーが発生しました。
引用符の前の最後のバックスラッシュは文字列定数をエスケープし、Python インタープリターは次のようにみなします。 ' 単一の文字として。このエスケープ シーケンスは引用符に変換されます (') 。
この問題は、次のコード スニペットを使用して解決できます。
解決:
# storing a directory path my_string = 'D:\Python\My_Folder\' # printing the string value print('String:', my_string)
出力:
String: D:PythonMy_Folder
説明:
上記のコード スニペットでは、 '\' 文字列定数で。その結果、Python インタープリターはエラーを発生させることなくその文字列を実行します。