次のプログラムには、間違いが一箇所あります。どこが間違っているか、わかるでしょうか?
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
に変更され、エラーメッセージは 「文法エラー: '{' が閉じていません」 となりました。
この他にも、いろいろと文法エラーのエラーメッセージが改善されています。初心者のうちはエラーメッセージを無視してしまいがちですが、しっかり読んでなぜエラーがでているのか、見極められるように頑張ってみましょう。
また、変数名や関数名の打ち間違いなどで発生する NameError
や AttributeError
のメッセージも改善されています。これまでのPythonでは、変数名を打ち間違えたりするとこんなエラーメッセージが表示されました。
>>> foo = 100
>>> print(fooo)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'fooo' is not defined
foo
を fooo
と打ち間違えて、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など、実行時に表示するエラーを独自にカスタマイズしている実行環境では、修正候補は表示されません。