# 5 `atexit` -- 終了ハンドラ

バージョン 2.0 で 新たに追加 された仕様です。

`atexit` モジュールでは、後始末関数を登録するための関数を一つだ け定義しています。この関数を使って登録した後始末関数は、インタプリタが 終了するときに自動的に実行されます。

注意: プログラムがシグナルで停止させられたとき、Python の致命的な内部 エラーが検出されたとき、あるいは`os._exit()`が呼び出された ときには、このモジュールを通して登録した関数は呼び出されません。

このモジュールは、`sys.exitfunc` 変数の提供している機能の代用とな るインタフェースです。

注意: `sys.exitfunc`を設定する他のコードとともに使用した場合には、 このモジュールは正しく動作しないでしょう。特に、他のコア Python モジュールでは、プログラマの意図を知らなくても`atexit`を自由に 使えます。`sys.exitfunc` を使っている人は、代わりに `atexit`を使うコードに変換してください。 `sys.exitfunc` を設定するコードを変換するには、`atexit` を import し、`sys.exitfunc` へ束縛されていた関数を登録するのが 最も簡単です。

`register`( | func[, *args[, **kargs]])

  終了時に実行される関数としてfuncを登録します。すべてのfunc へ渡すオプションの引数を、`register()`へ引数としてわたさなけ ればなりません。

  通常のプログラムの終了時、例えば`sys.exit()` が呼び出されると き、あるいは、メインモジュールの実行が完了したときに、登録された全ての 関数を、最後に登録されたものから順に呼び出します。通常、より低レベルの モジュールはより高レベルのモジュールより前に import されるので、 後で後始末が行われるという仮定に基づいています。

  終了ハンドラの実行中に例外が発生すると、(`SystemExit`以外の 場合は)トレースバックを表示して、例外の情報を保存します。 全ての終了ハンドラに動作するチャンスを与えた後に、最後に送出された 例外を再送出します。

参考:

`readline`:モジュール
  `readline`ヒストリファイルを読み書き するための`atexit`の有用な例です。.