こんにちは。PyQチームのnao_yです。
このPythonお悩み解決では、SyntaxError
の原因とエラーの読み解き方を紹介します。
SyntaxErrorとは?
SyntaxError
はプログラムがPythonの文法として正しくないときに発生するエラーです。
今回は関数やメソッドを使うときに起こるエラーに焦点を当てます。
エラー例
関数やメソッドを使うときにこのようなエラーが起きたことはないでしょうか?
# sample.py text = 'Hello, Python!' print(text, len(text) # ここは空行ですが、わかりにくいのでコメントを入れています
File "sample.py", line 4 ^ SyntaxError: unexpected EOF while parsing
エラーメッセージ
関数やメソッドの括弧を閉じ忘れているとSyntaxError: unexpected EOF while parsing
というエラーメッセージが表示されます。
これは「プログラムの解析中にファイルの末尾までたどり着いてしまった」という意味です。
エラーを読み解きながら、原因と発生する仕組みを確認します。
エラーを読み解こう
SyntaxError: unexpected EOF while parsing
が発生したとき、Pythonがどのような動作をしているか確認していきましょう。
以下はエラーがあるコードです。
# sample.py text = 'Hello, Python!' print(text, len(text) # ここは空行ですが、わかりにくいのでコメントを入れています
このコードのエラーの原因は、print関数の括弧が閉じられていないことです。
解決自体はとても簡単です。print関数に閉じ括弧)
をつけるだけです。
エラーを解決したコードを見ながら、エラーが発生する仕組みを理解してみましょう。
以下がエラーを解消したコードです。
# sample.py text = 'Hello, Python!' print(text, len(text)) # ここは空行ですが、わかりにくいのでコメントを入れています
コードが正しく書かれているとき、実行順はこのようになります。
- Pythonがコードを解釈する
- 変数textに文字列 'Hello, Python!' を代入する
- print関数を見つける
- print関数の引数
len(text)
を実行する - 変数textの文字列と
len(text)
で求めた文字列の長さが表示される
では、次にコードに文法ミスがあるときに動きを見てみましょう。
Pythonはまず人間が書いたコード全体を解釈します。SyntaxError
はこの段階で発生するエラーです。
Pythonは始め括弧(
を見つけると、それに対応する閉じ括弧を探します。
2行目のprint関数の始め括弧に対応する閉じ括弧が同じ行に見つからないとき、Pythonは3行目の空行まで閉じ括弧を探します。
そこまで探して見つからないと、エラーを発生させます。これがSyntaxError: unexpected EOF while parsing
が発生する仕組みです。
なお、閉じ括弧が不足している処理の後に他の処理がある場合は、別のエラーSyntaxError: invalid syntax
が発生します。
こちらのエラーを見かけることの方が多いかもしれません。
以上がSyntaxError: unexpected EOF while parsing
の解決法と発生する仕組みの説明です。
PyQのエディターをはじめとして、多くのエディターには始め括弧を入力すると閉じ括弧を補完する機能があります。とはいえ、プログラムを書いているときにうっかり閉じ括弧を消してしまってエラーが出ることもあるかもしれません。そんなときには落ち着いてエラーが発生している行の付近を観察して、原因を見つけましょう。