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

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

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

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

これは`sys.exitfunc`変数がはたす機能の代わりのインターフェイスです。

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

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

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

  通常のプログラムの終了時、例えば`sys.exit()`が呼び出されるとき、あるいは、メインモジュールの実行が完了したときに、登録されたすべての関数は後入先出順に呼び出されます。より低レベルのモジュールは通常より高レベルのモジュールより前にインポートされ、従ってより後で後始末するということが想定されています。

参考資料:

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