9.2 どのように動作するか

インタプリタには若干の変更がなされています。

トレース関数は3つの引き数を持ちます。 frame, event, そしてargです。 frame はカレントスタックフレームです。 eventは 文字列: 'call', 'line', 'return'または 'exception'です。 argはイベントタイプに依存します。

グローバルトレース関数は新しいローカルスコープに入ったときに呼び出されます (event'call'にセットされて)。 それはそのスコープ内で使用されるローカルトレース関数の リファレンスを返すかまたは、そのスコープではトレースされないのであればNoneを返します。

ローカルトレース関数は自身のリファレンス (またはそのスコープでさらに先のトレースのために他の関数へのリファレンス)を 返すかまたは、そのスコープではトレースをオフするためにNone返します。

インスタンスメソッドはトレース関数として認められます。(そしてそれは非常に便利です。)

イベントは次の意味を持っています。

'call'
関数が呼び出されました。(または他のコードブロックに入りました) グローバルトレース関数が呼ばれ、argはその関数への引き数リストで、戻り値はローカルトレース関数を指定します。

'line'
インタプリターが新しいコード行を実行しようとしています。 (1行で複数のlineイベントが存在することもあります。) ローカルトレース関数が呼ばれ、argはNoneで 戻り値は新しいローカルトレース関数を指定しています。

'return'
関数(またはコードブロック)がリターンしようとしています。 ローカルトレース関数が呼ばれ、 argは戻される値です。トレース関数の戻り値は無視さます。

'exception'
例外が発生しました。 ローカルトレース関数が呼ばれ、 argは(例外、値、トレースバック)の3つです。 戻り値は新しいローカルトレース関数を指定します。

注: 例外が呼び出し連鎖を辿って伝搬するにしてがって、 'exception'イベントは各レベルで生成されます。

コードとフレームオブジェクトについてのより多くの情報はパイソンリファレンスマニュアルを参照してください。

guido@python.org