Pythonのwithの理解

理解のあるPython

タグ(スペース区切り):Python


with一種として上下文管理器Pythonの役割は、を置き換えるために使用されるtry...except...finally処理フローとして簡単に理解できます

with__enter__メソッドを介して初期化し、その後__exit__、余波を実行して、メソッド内の例外を処理します。これwithは、事前に設定して後でクリーンアップする必要があるいくつかのタスクに非常に便利な表現提供します。次のwithステートメントが評価された後、オブジェクト__enter__返すメソッドが呼び出され__enter__返された結果がas次の変数に割り当てられます。場合with、次のコードブロックがすべて実行され、__exit__()メソッドオブジェクトを返すために呼び出されるクリーンアップ作業を行います。

ファイル操作と同じように:

file = open("file.txt")
try:
    data = file.read()
finally:
    file.close()

使用後with...as...、コードは次のように削減されます。

with open("file.txt") as file:
    data = file.read()

上記のコードでは、open()関数はandメソッドfileを持つタイプのオブジェクトを返し表示できます)、オブジェクトのメソッドを呼び出して戻り値を変数に割り当てるため、閉じる必要はありません。操作ファイルファイル使用時の表示。__enter____exit__dir(file),type(file)__enter__filewith...as...

私たちが知っているので、with...as...最も重要なことはある__enter__exit__我々はコンテキストマネージャをカスタマイズできること

その中で:

__enter__このメソッドは、コードブロックに入る前に呼び出されます。

__exit__コードブロックを離れた後に呼び出されます(コードブロックで例外が発生した場合でも)。

class WithDemo:
    def __enter__(self):
        print "in __enter__"
        return "WithDemo"
        
    def __exit__(self, type, value, trace):
        print "in __exit__"
        
def get_demo_with():
    return WithDemo()
    
with get_demo_with() as demo:
    print "demo:", demo

実行結果は次のとおりです。

in __enter__
demo:WithDemo
in __exit__

当初、with..as..代わりtry...except...finally...使用できるプロセス操作上記try...finally...の状況、異常はどうでしょうか?注意深く見る__exit__()と、3つのパラメーターがあります。これらの3つのパラメーターは、例外の処理を提供するパラメーターです。

class WithDemo:
    def __enter__(self):
        return self
        
    def __exit__(self, type, value, trace):
        print "type:", type
        print "value:", value
        print "trace:", trace
        
    def create_trace(self):
        return (1/10) + 10
        
with WithDemo() as demo:
    demo.create_trace()

コードを実行すると、コードがタイプ、値、およびトレースを出力することがわかります。

おすすめ

転載: blog.csdn.net/weixin_42575020/article/details/107565394