最終更新:2021-08-13 (金) 17:10:24 (980d)  

Python/with
Top / Python / with

https://docs.python.org/ja/3/reference/compound_stmts.html#the-with-statement

with EXPRESSION as TARGET:
    SUITE

  • with構文を使うとファイルの読み込みで必要なclose処理を省略することが出来ます
    with open("sample.txt", "r") as f:
        print(f.read())

仕組み

  • with構文が使えるクラスを作成するには、__enter__()メソッドと__exit__?()メソッドの両方を定義しなければなりません

動作

  • 以下のコード:
    with EXPRESSION as TARGET:
        SUITE
  • これは次と等価です:
    manager = (EXPRESSION)
    enter = type(manager).__enter__
    exit = type(manager).__exit__
    value = enter(manager)
    hit_except = False
    
    try:
        TARGET = value
        SUITE
    except:
        hit_except = True
        if not exit(manager, *sys.exc_info()):
            raise
    finally:
        if not hit_except:
            exit(manager, None, None, None)

関連