Python 3 の「例外」ブロックの外側にある名前付き例外にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-30 13:14:03
オリジナル
859 人が閲覧しました

How Can I Access Named Exceptions Outside of `except` Blocks in Python 3?

Except ブロックを超えて名前付き例外にアクセスする

Python 3 では、Exception ブロックの外側で名前付き例外を使用しようとすると、通常、NameError またはUnboundLocalError。 Python 2 とは異なり、Python 3 の例外にはトレースバックへの参照があり、例外句内のスコープ制限が生じます。

説明

try ステートメントは、明示的にバインドされた例外のスコープを変更して、循環参照と潜在的なメモリ リークを防ぎます。 as を使用して例外に名前が割り当てられている場合、例外は句の最後でクリアされます。これは、後で例外を参照するには、別の名前にバインドする必要があることを意味します。

回避策

Python 3 では例外のスコープが明確になっているため、主に 2 つの例外があります。例外ブロックを超えて例外にアクセスするアプローチ:

  1. 新しい名前へのバインド: 例外を同じ変数に割り当てる代わりに、例外を新しい名前にバインドします。例外句の終了:

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        new_exc = e
    print(new_exc)</code>
    ログイン後にコピー
  2. トレースバックのクリア: 例外が必要ない場合は、メモリ リークを防ぐためにそのトレースバックを明示的にクリアできます:

    <code class="python">try:
        raise Exception("Custom Error")
    except Exception as e:
        e.__traceback__ = None
    print(e)</code>
    ログイン後にコピー

履歴コンテキスト

Python 2 では、例外はトレースバックを参照しなかったため、スコープの制限は不要でした。その結果、潜在的なリソース リークに対処するために、Python 3 ではこの動作が変更されました。

注意

例外を新しい名前にバインドするときは、次のことを覚えておくことが重要です。元の例外は、Exception 節の終わりでクリアされます。例外をそれ自体に割り当て直すと (例: exc = exc)、新しいバインディングは作成されず、NameError が発生します。

以上がPython 3 の「例外」ブロックの外側にある名前付き例外にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!