Python3.10の新機能 Python 3.10の新機能(その3) エラーメッセージの改善

(その1) パターンマッチ(その2) with文のネスト(その3) エラーメッセージの改善(その4) | 演算子によるユニオン型の指定(その5) パラメータ仕様変数(その6) 明示的な型エイリアス(その7) ユーザ定義型ガード(その8) OpenSSL 1.1.1が必須に(その9) zip()関数に引数 strict を追加(その10) Dataclassでslotsが利用可能に(その11) その他の変更

次のプログラムには、間違いが一箇所あります。どこが間違っているか、わかるでしょうか?

d = {1:1,
     2:2,
     3:3

do_something(d)

このプログラムをこれまでのPythonで実行すると、次のようなエラーが表示されます。

File "/home/python/test.py", line 6
    do_something(d)
               ^
SyntaxError: invalid syntax

エラーメッセージは、「文法エラー: 正しくない文法です」 とかかれています。あんまり役に立たないエラーメッセージですね。なにが間違っているのか、情報量ゼロです。

Python3.10では、文法エラーのエラーメッセージがいろいろと改善されています。この例では、

File "/Users/ishimoto/test.py", line 1
    d = {1:1,
        ^
SyntaxError: '{' was never closed

に変更され、エラーメッセージは 「文法エラー: '{' が閉じていません」 となりました。

この他にも、いろいろと文法エラーのエラーメッセージが改善されています。初心者のうちはエラーメッセージを無視してしまいがちですが、しっかり読んでなぜエラーがでているのか、見極められるように頑張ってみましょう。

また、変数名や関数名の打ち間違いなどで発生する NameErrorAttributeError のメッセージも改善されています。これまでのPythonでは、変数名を打ち間違えたりするとこんなエラーメッセージが表示されました。

>>> foo = 100
>>> print(fooo)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'fooo' is not defined

foofooo と打ち間違えて、fooo という名前は定義されていません とメッセージが出ています。

3.10では、次のように、正しい名前の候補を表示してくれます。

>>> foo = 100
>>> print(fooo)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'fooo' is not defined. Did you mean: 'foo'?

新しいエラーメッセージは、fooo という名前は定義されていません。 'foo' の間違いでは? と表示されます。

注) ipythonやJupyter labなど、実行時に表示するエラーを独自にカスタマイズしている実行環境では、修正候補は表示されません。

Copyright © 2001-2021 python.jp Privacy Policy python_japan
Amazon.co.jpアソシエイト
Amazonで他のPython書籍を検索