問題タブ [contextmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - ジェネレーター内でコンテキストマネージャーを使用する有意義な方法はありますか?
出力:
ループが中断され__exit__たときに、python が context()のメソッドを自動的に呼び出すようにする方法はありますか? forまたは、同じ目的を達成するための他の方法はありますか? ジェネレーターとコンテキスト マネージャーについて私が知っていることから、それは不可能だと思われますが、これにより、ジェネレーター内でコンテキスト マネージャーが役に立たなくなりますね。私には、ブロックyield内のステートメントwithは赤いフラグを立てる必要があるようです。コンテキストマネージャー__exit__は実行されない可能性があります。
python - 状態を保存、変更、および復元するコンテキスト依存の Python コンテキスト マネージャーを作成することは可能ですか?
現在、グローバル変数を 2 つの値の間で切り替える 1 組の python 関数があります。それらをコンテキストマネージャーに変えて、ブロックとして使用できるようにしたいと思いますwith。ブロック内で変数を設定しますが、後で復元します。望ましい動作は次のとおりです。
そのようなキメラは可能ですか?
更新:わかりやすくするために、コンテキスト マネージャーのみの実装を次に示します。
これらを w/oa キーワードで呼び出すと、ジェネレーターが返されます。プレーン バニラ関数呼び出しとチョコレート コンテキスト マネージャーの両方でモード反転動作を取得する方法はありますか?
python - 循環参照のあるオブジェクトの破棄
私のデザインは次のとおりです。
__main__参照aa参照bb参照aaから作成され、廃棄されます__main__
したがってa、b循環参照があります。しかし、私は両方を好み、処分しdel aたいと思います。ab
多くの場所で、コンテキストマネージャーを使用するためのアドバイス、具体的にはのwith代わりにステートメントを目にし__del__()ます。ただしwith、ローカルスコープでの開始と終了のすべての例(特定のメソッドなど)
これはエレガントに実行できますwithか?
代替手段は何ですか?
python - zipfileの__enter__と__exit__はどこで定義されていますか?
withステートメントに基づく
- コンテキストマネージャ
__exit__()は、後で使用するためにロードされます。 - コンテキストマネージャの
__enter__()メソッドが呼び出されます。
zipfileでの使用法の1つを見ました
質問>ここにあるzipfileのソースコードを確認しました:
/usr/lib/python2.6/zipfile.py
__enter__と__exit__関数がどこで定義されているのかわかりませんか?
ありがとうございました
python - シリアル ポート コンテキスト マネージャー
以下は合理的なアプローチですか?
どこにコンテキストマネージャーインターフェースSerialPortsを実装します。SerialPort
SerialPorts.exit()追加されたシリアル ポートをループして、exit(). はシリアルポートを閉じますSerialPort。exit()
これを行うより良い方法はありますか?
python - PythonのMySQLdbのコンテキストマネージャー
私はSQLデータベースを処理するためのPythonのSQLiteインターフェースに慣れています(甘やかされていますか?)。PythonのSQLiteのAPIの優れた機能の1つである「コンテキストマネージャー」、つまりPythonのwithステートメント。私は通常、次の方法でクエリを実行します。
上記のコードでは、クエリがデータベースを変更し、実行するのを忘れた場合、ステートメントconn.commit()を終了すると、コンテキストマネージャーが自動的にデータベースを実行します。withまた、例外を適切に処理します。何かをコミットする前に例外が発生した場合、データベースはロールバックされます。
私は現在、MySQLdbインターフェースを使用していますが、これは、そのままでは同様のコンテキストマネージャーをサポートしていないようです。自分で作成するにはどうすればよいですか?ここに関連する質問がありますが、完全な解決策を提供するものではありません。
python - コンテキスト マネージャーはこの仕事に適していますか?
以下に貼り付けたコードは、次のことを行います。
- インポートフックを作成します
meta_pathを設定し、終了時にクリーンアップするコンテキスト マネージャを作成します。- imports.log の入力に渡されたプログラムによって行われたすべてのインポートをダンプします
この場合、コンテキストマネージャーを使用するのが良い考えかどうか疑問に思っていました。実際には標準try/finallyフローがなく、セットアップとクリーンアップだけがあるからです。
別のこと—次の行で:
ccになりますNoneか?CollectorContextそれはオブジェクトであるべきではありませんか?
python - Pythonでは、セットアップ/ティアダウンでコンテキストマネージャーを使用するための良いイディオムがありますか
Pythonでたくさんのコンテキストマネージャーを使用していることがわかりました。しかし、私はそれらを使用して多くのことをテストしてきました、そして私はしばしば以下を必要としています:
setUp()これが多くのテストに到達すると、明らかに退屈になるので、SPOT / DRY(信頼できる唯一の情報源/繰り返してはいけない)の精神で、これらのビットをテストとtearDown()メソッドにリファクタリングしたいと思います。
しかし、それを行おうとすると、この醜さにつながります。
これを行うためのより良い方法があるはずです。理想的には、各テストメソッドの反復ビットなしのsetUp()/tearDown()で(各メソッドでデコレータを繰り返すことでどのように実行できるかがわかります)。
編集:アンダーテストオブジェクトは内部のものであり、GetResourceオブジェクトはサードパーティのものであると考えてください(これは変更していません)。
ここに名前を変更GetSlotしGetResourceました—これは特定の場合よりも一般的です—コンテキストマネージャーは、オブジェクトがロック状態になり、ロックアウトすることを目的とした方法です。
python - コンテキスト マネージャを使用してスクリプト出力をファイルにリダイレクトしますか?
スクリプトがその結果を標準出力に出力するか、定義済みの結果ファイルに出力するかを、コマンド ラインで渡すオプションがあるスクリプトをプログラミングしています。このコードの概要を以下に示します。Python のコンテキスト マネージャーについて少し読んだことがありますが、この特定の状況でコンテキスト マネージャーを使用するかどうか、またどのように使用するかはよくわかりません。なのでアドバイス募集中です
- この問題でコンテキスト マネージャーを使用する意味があるかどうか
- それを実装する方法。
したがって、コンテキスト マネージャーを使用しないコードは次のようになります。
python - Pythonコンテキストマネージャーのネスト
この質問では、コンテキストマネージャーを含むコンテキストマネージャーを定義しました。この入れ子を実現するための最も簡単な正しい方法は何ですか?self.temporary_file.__enter__()に電話してしまいましたself.__enter__()。ただし、では、例外が発生した場合に備えて、finallyブロックself.__exit__を呼び出す必要があると確信しています。self.temporary_file.__exit__(type_, value, traceback)何か問題が発生した場合、type_、value、およびtracebackパラメーターを設定する必要がありますself.__exit__か?チェックcontextlibしましたが、これを支援するユーティリティが見つかりませんでした。
質問の元のコード: