問題タブ [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.

0 投票する
1 に答える
2317 参照

python - contextmanager-function が Python の contextmanager クラスのように機能しないのはなぜですか?

私のコードでは、デバイスを適切に開いたり閉じたりできる必要があるため、コンテキスト マネージャーを使用する必要があることがわかります。__enter__コンテキスト マネージャーは通常、とメソッドを持つクラスとして定義され__exit__ますが、コンテキスト マネージャーで使用するために関数を装飾する可能性もあるようです (最近の投稿別の良い例を参照してください ここ)。

次の (動作中の) コード スニペットでは、2 つの可能性を実装しています。コメント行を別の行と交換するだけです。

私が試しているのは、コードを実行して で停止することCTRL-Cです。Wrapコンテキストマネージャーでクラスを使用すると、__exit__メソッドは期待どおりに呼び出されます (端末にテキスト「close」が出力されます)が、wrap関数で同じことを試みると、テキスト「close」が出力されませんターミナル。

私の質問: コード スニペットに問題がありますか、何か不足していますか、それともprint("close")装飾された関数で行が呼び出されないのはなぜですか?

0 投票する
2 に答える
8293 参照

python - py.test - funcarg/fixture でコンテキスト マネージャーを使用する方法

密接に関連しています: Pythonでは、セットアップ/ティアダウンでコンテキストマネージャーを使用するための良いイディオムがありますか


時間/タイムゾーンを修正するためにテストで使用されるコンテキストマネージャーがあります。私はそれをpytest funcarg(またはフィクスチャ、pytest2.2.3を使用していますが、逆に翻訳できます)に入れたいです。私はこれを行うことができます:

…が、ちょっとイケる。関連する Qで jsbuenoは次のように指摘しています。問題は、例外が発生した場合にオブジェクトの__exit__メソッドを適切に呼び出すための準備がコードにないことです。

彼の答えは、メタクラスのアプローチを使用しています。しかし、これは、多くの場合、テストがクラスではなく単なる関数である pytest にはあまり役立ちません。では、これを解決する pytest-y の方法は何でしょうか? runtest フックに関するものはありますか?

0 投票する
3 に答える
9832 参照

python - 可変数のコンテキストマネージャーを使用した contextlib.nested の代替

ランタイム パラメータに応じて、可変数のコンテキスト マネージャを呼び出すコードがあります。

ただし、contextlib.nestedPython 2.7 以降では非推奨です:

Python 'with' ステートメントの複数の変数に対する回答は、contextlib.nestedいくつかの「混乱を招くエラーが発生しやすい癖」があることを示していますが、複数のマネージャー ステートメントを使用するという提案された代替手段は、with可変数のコンテキスト マネージャーでは機能しません (また、下位互換性が失われます)。 )。

contextlib.nested非推奨ではなく、(できれば)同じバグがない代替手段はありますか?

または、引き続き使用contextlib.nestedして警告を無視する必要がありますか? もしそうなら、私contextlib.nestedは将来的に削除される予定がありますか?

0 投票する
2 に答える
113 参照

python - for ループのみを使用してファイルを反復処理するのは適切ですか?

ファイル内の行を次のように反復するコードに出くわしました。

それは次のようなもののよりPythonicなバージョンですか:

インデントが少ないので見栄えが良くなりますが、同じですか?私が知っていることから、with基本的finally: f.close()にその効果にまたは何かを追加して、ブロックを離れた後にオブジェクトがクリーンアップされるようにします。最初のforループが終了して (またはおそらく a で短くされてbreak)、変数が範囲外になると、同じことが起こりますか? コードの最初のビットからヒントを得て、キーストロークを節約できますか、それとも修正する必要がありますか?

0 投票する
1 に答える
353 参照

python - 任意の数の Python ファイル コンテキスト マネージャーをネストするにはどうすればよいですか?

ネストされた tar アーカイブを表す任意の数のパスを取得し、最も内側のアーカイブに対して操作を実行したいと考えています。問題は、ネスティングが任意になる可能性があるため、必要なコンテキスト マネージャーの数も任意になることです。

たとえば、次のようにします。

ネストするレベルはいくつでもある可能性があるため、withステートメントのネスト構文は使用できません。contextlib.nestedドキュメントに次のように記載されているため、使用できません。

... nested()2 番目のファイルを開くときに例外がスローされると、最初のファイルがすぐに閉じられないため、2 つのファイルを開くために使用することはプログラミング エラーです。

これを行うために言語構造を使用する方法はありますか?それとも、開いているファイル オブジェクトの独自のスタックを手動で管理する必要がありますか?

0 投票する
1 に答える
1443 参照

python - Python の複数行 with 句

withPythonで長い句を複数行に広げるにはどうすればよいですか? 今、私は持っています

バックスラッシュ行の継続を禁止する Google の Python スタイル ガイドに従いたいと思います。

0 投票する
1 に答える
460 参照

python - With-Statement と Threading : 実行前に関数を実行する

この質問は、次の質問のフォローアップです: With statement and python threading

私はpython threading apiを試しています。私は達成したいことのために機能するこのコードを持っています:----> Pythonスレッドで実行を呼び出す前に関数を実行します。

ただし、これを行うには、常に run() メソッドで time.sleep(1) を呼び出して、execute() に進む必要があります。そうしないと、スレッドは関数の割り当てと実行なしで終了します。このタイプを実現するためのより良い方法はありますか?待っている?

0 投票する
1 に答える
962 参照

python - contextlib.contextmanager を使用して定義されたコンテキスト マネージャーへの送信

コンテキストマネージャーがあるとします:

zコンテキストマネージャーに送信するにはどうすればよいですか?

私は試した:

しかし、私はStopIterationを取得します。これは、send利回りが原因でしょうか?

0 投票する
1 に答える
243 参照

python - Python でコンテキスト マネージャーを使用する方法

以下は架空のコードです

この場合、ブロック db.close() が呼び出され、db がガベージ コレクションの対象としてマークされることを期待します。

仕事で、このコードが発生するのを見始めました。

Javaのnewキーワードのように使用する必要があるかどうかはわかりません。with を使用するときにできる/できない/すべきでないことを説明する良いドキュメントを教えてもらえますか?

PSログメッセージは実際にはそれほど不自由です:-)