まず、概念
コンテキストマネージャ:オブジェクトは、コンテキスト管理プロトコルを達成することです。主に保存し、グローバルな状態のすべての種類を復元し、その上にファイルを閉じて、ために使用されます。コンテキストマネージャ自体がデコレータです。
コンテキストが自動的に起動し、終了することを可能にし、多くのこと。例えば、ファイルを開くなど...で使用する、Pythonは自動的にコンテキストマネージャを作成します。
第二に、コンテキスト管理プロトコル
コンテキスト管理プロトコルは、2つのメソッドを含みます。
contextmanagerは__()を入力.__:コードの命令ブロックの元、__enterの__()、戻り値は次のように文の変数に割り当てられているを行います。
contextmanager .__出口__()ステートメントを使用してコードのブロック終了又はエラー)(__ __exit行います。
第三に、...ではなく、一例として、最終的には、ファイルを開く...を除いて...してみてください
#のエラーの書き込み
を試して:
F =オープン(「XXX 」)
何かを
除い:
何かを
最後に:
f.close
##################
#正しい言葉遣いを
「」 ' プログラムがファイルを閉じ、最終的にスローすることはできません防ぐためにあるため、最終的に書き
ますが、ファイルは、ファイルが開かれているという前提を持って閉じる必要があります。エラーコードの最初の段落では、
ファイルが存在しないとして、例えば、F =オープン(「XXX」)、ときに例外が発生した場合に
正解が最初である直後にあなたが実行f.closeを知ることができますが、()、無意味です秒コード「」 '
試み:
F =オープン(『XXX』)は
除い:
印刷(『開くに失敗します』)
終了( -1 )
してみてください:
何かを
除い:
何かを
最後に:
f.closeを()
...のように...:
#ファイルを開くと、それが最終的に閉じていることを確認
オープン(と「XXX 」F AS):
データ = )f.read(
データで何かを
#複数開くために
オープン(と「XXX 」 F1 AS)、オープン(「YYY 」) F2 AS:
F1で何かをし、F2
第四に、カスタムコンテキストマネージャ
class MyContextManager(object):
def __init__(self):
print("init 函数被调用")
def __enter__(self):
print("enter函数被调用,返回一个对象")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("exit 函数被调用")
with MyContextManager():
print("创建实例做点什么")
################
#结果:
init 函数被调用
enter函数被调用,返回一个对象
创建实例做点什么
exit 函数被调用