対話型インタプリタの機能強化[3.13]
Python 3.13では、対話型インタプリタにおいて、多色化、複数行編集、ファンクションキーへの機能割り当てなどが実施され、使いやすくなりました。従来のインタプリタに戻すには、PYTHON_BASIC_REPL環境変数をセットします。
多色化による視認性の向上
これまでのPythonではインタプリタの出力は1色のみでしたが、プロンプトとトレースバック表示に色付けされて視認性が向上しました。プロンプトの「>>>」はマゼンタで表示されるので、プロンプトであることがはっきり分かります。
トレースバックもメッセージ部分に色が付き、コードと区別しやすくなりました。
色付けは、PYTHON_COLORS環境変数にNO_COLORかFORCE_COLORのいずれかをセットすることで制御できます。
複数行編集
複数行の編集とは、複数行からなるコードを、その全体を呼び出して一度に編集できるようにする機能です。これまでは、複数行のコードに誤りがあった場合には、最初から入力し直す必要がありましたので、修正の効率がアップします。
同時に、if文やelse文の末尾(コロンの後)で改行すると、自動的に次行がインデントされるようになりました。
ファンクションキーへの機能割り当て
一部の機能がファンクションキーに割り当てられ、ワンストロークで呼び出せるようになりました。
- [F1]:ヘルプユーティリティへの移行
- [F2]:履歴の表示
- [F3]:コードブロックの貼り付け(貼り付けモード)
ヘルプユーティリティへの移行はhelpコマンドでしたが、[F1]キーを使うことでヒストリを汚すことなくヘルプユーティリティを利用できます。入力の履歴は、~/.python_historyファイルの表示が必要でしたが、[F2]キーでlessコマンドを直接呼び出して表示できるようになりました(PYTHON_HISTORY環境変数による履歴ファイルの指定もPython 3.13で可能になっています)。[F3]キーによる貼り付けは、大きなコードブロックを次々と貼り付けるのに向いています。
この他、help()、quit()、exit()といったコマンドが、関数である必要がなくなりました。具体的には、help、quit、exitのみで利用できます。Python 3.12では、関数であることを表すカッコが必要でした。
エラーメッセージの改良[3.13]
Python 3.12でも改良されたエラーメッセージの内容が、より的確にわかりやすくなりました。インタプリタの改良で既定で色付けされるのに加え(環境変数で制御できます)、修正すべき箇所がより具体的に伝わるようになりました。
例えば、以下のリストの通りのコードがあるとします。
import random print(random.randint(5))
乱数を表示することを狙ったコードですが、これを実行するとPython 3.12では以下のエラーが表示されます。
Traceback (most recent call last): File "/Users/nao/…/random.py", line 1, in <module> import random File "/Users/nao/…/random.py", line 2, in <module> print(random.randint(5))^
^
^^^^ AttributeError: partially initialized module 'random' has no attribute 'randint' (most likely due to a circular import)
モジュールrandomはrandintという属性を持っていないといった意味のエラーです。スクリプトファイルがrandom.pyなのでimport文で循環インポートしているとも補足されていますが、初心者には何のことか伝わりにくいでしょう。
Python 3.13では、以下のエラーメッセージに改良されました。
AttributeError: module 'random' has no attribute 'randint' (consider renaming '/Users/nao/…/random.py' since it has the same name as the standard library module named 'random' and the import system gives it precedence)
カッコ内に着目すると、実行しようとしているファイルがrandomという標準モジュールと同じ名前で、しかもこちらが優先されるので、リネームを検討せよ、とあります。このように、どう修正すればよいかまで具体的に示してくれるようになりました。関数のキーワード引数の名前が間違っている場合にも、候補とともに指摘してくれます。