私はグローバルインスタンスを持っていますが__del__
、Pythonインタープリターが終了すると破棄される(関数が呼び出される)と予想されます。Pythonインタープリターに期待しすぎていませんか?__del__
これをテストする私の方法は、関数に印刷を入れ、python.exe
コマンドラインから実行してからCtrl/Breakを押すことです。この時点で、コマンドラインウィンドウに印刷が表示されることを期待しています。しかし、私はしません。
質問する
1359 次
2 に答える
6
はい、あなたはあまりにも多くを期待しています。Pythonは呼び出しについて何の保証もしません__del__
:
__del__()
インタプリタの終了時にまだ存在するオブジェクトに対してメソッドが呼び出されることは保証されていません。
編集:
通常、は使用しないでください__del__
。ほとんどの場合、コンテキストマネージャーの方が優れています。まれに、インタプリタの終了時に外部(つまり、Cコードから割り当てられた)リソースがクリーンアップされることを確認する必要がある場合は、atexit
モジュールを使用できます。
于 2013-03-20T23:21:36.213 に答える
4
signal.SIGBREAK
シグナルのハンドラーを追加できます。ctrl
+をインターセプトできますbreak
。ドキュメントを作成します:
import signal, os
def handler(signum, frame):
print 'Someone is trying to exit!', signum
signal.signal(signal.SIGBREAK, handler)
于 2013-03-20T23:18:57.213 に答える