Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonのSyntaxError(無効な構文)とは?主な原因と解決方法を徹底解説

構文(シンタックス)とは、プログラミング言語の書き方を定めるルールのことです。各言語にはそれぞれ固有の構文ルールがあり、他の言語とは異なります。これは、話し言葉における文法や句読点にたとえることができます。たとえば、英語の疑問符「?」とギリシャ語の疑問符「;」は、見た目こそ似ていても別の記号です。

つまり、構文エラーが発生したということは、そのプログラミング言語を正しく書けていないことを意味します。うっかり構文の一部を書き忘れたり、別の言語の構文を混在させてしまったりすることは、開発者が複数の技術スタックを扱うようになると特によく起こります。

この記事では、Pythonでよく見られるSyntaxError(構文エラー)を取り上げ、具体的なコード例を挙げながら、その原因と修正方法をわかりやすく解説します。

よくあるSyntaxErrorとその解決方法

1. 辞書(ディクショナリ)でのカンマ忘れ

まず、以下のコードでなぜ構文エラーが発生するのか考えてみてください。

student_gpas = {
    'Mary': 3.0,
    'Tim': 2.5
    'John': 4.0
}
print(f'Mary has a {student_gpas["Mary"]} GPA.')
 
# SyntaxError: invalid syntax が返される

答えは「2.5 のキーと値のペアの後にカンマが抜けている」です。JavaScriptのオブジェクトと同様に、Pythonの辞書では、最後のキーと値のペアを除き、それぞれのペアの末尾にカンマが必要です。

上記のエラーの解決策は以下の通りです。

student_gpas = {
    'Mary': 3.0,
    'Tim': 2.5,
    'John': 4.0
}
print(f'Mary has a {student_gpas["Mary"]} GPA.')
 
# Mary has a 3.0 GPA. が出力される

2. 引用符(クォート)の使い方の誤り

次に、以下のコードでなぜ構文エラーが発生するのか考えてみましょう。

print('Mary's teacher stated that she has a 3.0 GPA.')
 
# SyntaxError: invalid syntax が返される

答えは「シングルクォートで囲んだ文字列の中に、同じ種類のシングルクォートを使っている」です。Pythonで引用符を含む文字列を扱う際に構文エラーを避けるには、主に次の2つの方法があります。

方法1:ダブルクォーテーションで囲む

print("Mary's teacher stated that she has a 3.0 GPA.")

方法2:バックスラッシュでエスケープする

print('Mary\'s teacher stated that she has a 3.0 GPA.')

3. 古いバージョンのPythonで新しい構文を使う

使用している構文が、利用中のPythonのバージョンと互換性があるかどうかを必ず確認しましょう。たとえば、Python 3.6より前のバージョンではf文字列(f-string)を認識できないため、実行すると無効な構文エラーが発生します。開発者は、Pythonを新しいバージョンに更新するか、現行バージョンに対応した構文に書き換えるかのいずれかを選択することになります。

student_gpas = {
    'Mary': 3.0,
    'Tim': 2.5,
    'John': 4.0
}
print(f'Mary has a {student_gpas["Mary"]} GPA.')
 
# 古いバージョンのPythonでは SyntaxError: invalid syntax が返される

4. Pythonキーワードの不適切な使用

Pythonのキーワードを誤って使っていないかを確認する最善の方法は、各キーワードの意味と用途をしっかり把握しておくことです。Pythonのキーワードについてさらに学びたい方は、「not キーワードの使い方」「yield キーワードのガイド」「positional argument follows keyword argument エラーの解決法」などの関連記事も参考にするとよいでしょう。

それでは、以下のコードでなぜ構文エラーが発生するのか考えてみてください。

continue = True
 
print(continue)
 
# SyntaxError: invalid syntax が返される

答えは「予約語であるキーワードに値を代入しようとしているから」です。continueはPythonのキーワードで、ループ処理において次の反復へスキップするために使われます。このコードを修正するには、ブール値Trueを、Pythonのキーワードではない通常の変数名に代入します。

on = True
 
print(on)
 
# True が出力される

まとめ

SyntaxErrorは、コードがPythonの構文ルールに従っていない場合に発生するエラーです。その原因は、カンマの付け忘れ、引用符の重複、古いバージョンとの非互換な構文、キーワードの誤用など多岐にわたります。エラーメッセージに表示される行番号を手がかりに、該当箇所とその周辺のコードを丁寧に確認することが、迅速な問題解決への近道です。日頃からPythonの構文ルールとバージョン間の違いを意識しておくことで、こうしたエラーの多くは未然に防ぐことができます。

  1. Pythonの例外はすべてランタイムエラーなのか?構文エラーとの違いを解説

    Pythonの例外はすべてランタイムエラーなのか? 結論から言うと、Pythonの例外(Exception)がすべてランタイムエラーというわけではありません。中には構文エラーとして扱われるものもあります。 例えば、以下のコードを実行すると、次のような出力が得られます。 File C:/Users/TutorialsPoint1/~.py, line 4 else: ^ SyntaxError: invalid syntax この出力からわかるように、これはランタイムエラーではなく、構文エラー(SyntaxError)です。 プログラムのエラーとデバッグの基本 プログラムに含まれる誤りや不正確

  2. PythonでSyntaxError例外をキャッチする方法をわかりやすく解説

    Pythonでは、パーサー(構文解析器)が理解できないソースコードを検出すると、必ずSyntaxErrorが発生します。このエラーは、モジュールのインポート時、exec()の実行時、あるいはeval()の呼び出し時などに起こり得ます。 SyntaxError例外には、入力テキストのどの部分がエラーの原因になったのかを正確に特定するための属性が用意されています。主な属性は以下のとおりです。 filename:エラーが発生したファイル名 lineno:エラーが発生した行番号 offset:行内でのエラー箇所の位置(列オフセット) text:エラーが含まれていたソースコードの行 コード例