Python での例外処理と変数スコープ
Python で名前付き例外を使用する場合、開発者が実行しようとすると、NameError や UnboundLocalError などのエラーが発生する場合があります。例外ブロックの外側で例外にアクセスします。この動作は、try ステートメント内のバインドされた例外の明示的なスコープ設定から発生します。
Python 3 では、スタック フレームでの循環参照によって引き起こされる偶発的なメモリ リークを防ぐために、バインドされた例外は、Except 句の最後で自動的にクリアされます。 。したがって、後でアクセスできるように、例外には別の名前を割り当てる必要があります。 exc = exc のような代入では十分ではありません。
Python 2 では、トレースバック参照がないため、このクリアは必要ありませんでした。ただし、Python 2 でも、循環参照の回避に関する警告が存在しました。
この問題を回避するには、2 つのオプションがあります。 1 つの方法は、例外ブロック内の別の名前に例外を再バインドし、この新しい名前が try ステートメントのスコープ内にないことを確認することです。
try: raise Exception("foo") except Exception as e: my_exception = e
アクセスが必要ない場合は、別の方法として、例外トレースを明示的にクリアして、潜在的なメモリ リークを防ぐことができます。
try: raise Exception("foo") except Exception as e: exc = e exc.__traceback__ = None
これらの対策は、Python で適切なメモリ管理と例外処理を確保するために不可欠であることを覚えておいてください。例外の適切な参照とクリアは、メモリ リークを防ぎ、コードの安定性を維持するのに役立ちます。
以上がPython の「例外」ブロックの外側にある例外にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。