エラーメッセージの改良[3.14]
Python 3.14では、キーワードにタイプミスが検出されるなどすると、インタプリタが役立つ候補を表示するようになりました。
従来のPythonでは、以下の図(上)のように構文エラーである旨だけが出力されていましたが、Python 3.14では図(下)のように具体的に「whileでは?」と親切に出力されます。
▼
これに加えて、以下の局面でエラーメッセージが改善されています。
- elseブロックに続いてelif文がある場合
- 文がelse式の後に現れるか、pass、break、continueのいずれかがif式の前に現れる場合
- 誤って閉じられた文字列が検出された場合
- 文字列に互換性のない接頭辞がある場合(ubなど)
- as句に互換性のないターゲットを使用した場合
- ハッシュ不可能な型のインスタンスをdictまたはsetに追加しようとしたとき
- 同期コンテキストマネージャプロトコルをサポートするオブジェクトにwithの代わりにasync withを使用して入力した場合
PyREPLでの構文強調表示[3.14]
Python 3.14では、PyREPLやモジュールのヘルプなどで、構文がハイライト(強調)表示されるようになりました。
従来のPythonでは、以下のようにPyREPLにおいてハイライト表示を備えていませんでした。これがPython 3.14でサポートされたことで、REPL環境においてタイプミスに気付きやすくなったと言えます。
[NOTE]REPL
REPLとは、Read-Evaluate-Print-Loopの略で、読み込んだコードをその場で評価、表示し、それを繰り返す対話型環境を言います。あらかじめソースファイルを作成する必要がなく、その場で入力、検証できるので、学習や検証に適しています。Pythonをはじめとして、RubyやJavaScriptなどインタプリタ型の言語はREPLを標準サポートしています。
以下は、Python 3.14においての同様の操作です。コメントが赤く、defキーワードが青く、printやリテラルに色付けされているのが分かります。
環境変数PYTHON_BASIC_REPLかNO_COLORを1に設定すると、構文ハイライト機能は無効化されます。ただしPYTHON_BASIC_REPLはPyREPLを基本モードに戻すため、exitによる脱出や、Python 3.14でサポートされた補完機能も使えなくなることに注意してください。
まとめ
今回は、フリースレッドPythonの正式サポート、テイルコールに基づく新型インタプリタによる高速化、エラーメッセージの改善や構文強調表示など、インタプリタや言語インタフェースの強化を中心に紹介しました。
Pythonでは、このように魅力的な機能強化や改良が各バージョンで施されています。より高速で使い勝手のよい言語として成長し続けるPythonを、今後も追っていきたいものです。
