問題タブ [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 - contextmanager-function が Python の contextmanager クラスのように機能しないのはなぜですか?
私のコードでは、デバイスを適切に開いたり閉じたりできる必要があるため、コンテキスト マネージャーを使用する必要があることがわかります。__enter__
コンテキスト マネージャーは通常、とメソッドを持つクラスとして定義され__exit__
ますが、コンテキスト マネージャーで使用するために関数を装飾する可能性もあるようです (最近の投稿と別の良い例を参照してください ここ)。
次の (動作中の) コード スニペットでは、2 つの可能性を実装しています。コメント行を別の行と交換するだけです。
私が試しているのは、コードを実行して で停止することCTRL-C
です。Wrap
コンテキストマネージャーでクラスを使用すると、__exit__
メソッドは期待どおりに呼び出されます (端末にテキスト「close」が出力されます)が、wrap
関数で同じことを試みると、テキスト「close」が出力されませんターミナル。
私の質問: コード スニペットに問題がありますか、何か不足していますか、それともprint("close")
装飾された関数で行が呼び出されないのはなぜですか?
python - py.test - funcarg/fixture でコンテキスト マネージャーを使用する方法
密接に関連しています: Pythonでは、セットアップ/ティアダウンでコンテキストマネージャーを使用するための良いイディオムがありますか
時間/タイムゾーンを修正するためにテストで使用されるコンテキストマネージャーがあります。私はそれをpytest funcarg(またはフィクスチャ、pytest
2.2.3を使用していますが、逆に翻訳できます)に入れたいです。私はこれを行うことができます:
…が、ちょっとイケる。関連する Qで jsbuenoは次のように指摘しています。問題は、例外が発生した場合にオブジェクトの__exit__
メソッドを適切に呼び出すための準備がコードにないことです。
彼の答えは、メタクラスのアプローチを使用しています。しかし、これは、多くの場合、テストがクラスではなく単なる関数である pytest にはあまり役立ちません。では、これを解決する pytest-y の方法は何でしょうか? runtest フックに関するものはありますか?
python - 可変数のコンテキストマネージャーを使用した contextlib.nested の代替
ランタイム パラメータに応じて、可変数のコンテキスト マネージャを呼び出すコードがあります。
ただし、contextlib.nested
Python 2.7 以降では非推奨です:
Python 'with' ステートメントの複数の変数に対する回答は、contextlib.nested
いくつかの「混乱を招くエラーが発生しやすい癖」があることを示していますが、複数のマネージャー ステートメントを使用するという提案された代替手段は、with
可変数のコンテキスト マネージャーでは機能しません (また、下位互換性が失われます)。 )。
contextlib.nested
非推奨ではなく、(できれば)同じバグがない代替手段はありますか?
または、引き続き使用contextlib.nested
して警告を無視する必要がありますか? もしそうなら、私contextlib.nested
は将来的に削除される予定がありますか?
python - for ループのみを使用してファイルを反復処理するのは適切ですか?
ファイル内の行を次のように反復するコードに出くわしました。
それは次のようなもののよりPythonicなバージョンですか:
インデントが少ないので見栄えが良くなりますが、同じですか?私が知っていることから、with
基本的finally: f.close()
にその効果にまたは何かを追加して、ブロックを離れた後にオブジェクトがクリーンアップされるようにします。最初のfor
ループが終了して (またはおそらく a で短くされてbreak
)、変数が範囲外になると、同じことが起こりますか? コードの最初のビットからヒントを得て、キーストロークを節約できますか、それとも修正する必要がありますか?
python - 任意の数の Python ファイル コンテキスト マネージャーをネストするにはどうすればよいですか?
ネストされた tar アーカイブを表す任意の数のパスを取得し、最も内側のアーカイブに対して操作を実行したいと考えています。問題は、ネスティングが任意になる可能性があるため、必要なコンテキスト マネージャーの数も任意になることです。
たとえば、次のようにします。
ネストするレベルはいくつでもある可能性があるため、with
ステートメントのネスト構文は使用できません。contextlib.nested
ドキュメントに次のように記載されているため、使用できません。
...
nested()
2 番目のファイルを開くときに例外がスローされると、最初のファイルがすぐに閉じられないため、2 つのファイルを開くために使用することはプログラミング エラーです。
これを行うために言語構造を使用する方法はありますか?それとも、開いているファイル オブジェクトの独自のスタックを手動で管理する必要がありますか?
python - Python の複数行 with 句
with
Pythonで長い句を複数行に広げるにはどうすればよいですか? 今、私は持っています
バックスラッシュ行の継続を禁止する Google の Python スタイル ガイドに従いたいと思います。
python - With-Statement と Threading : 実行前に関数を実行する
この質問は、次の質問のフォローアップです: With statement and python threading
私はpython threading apiを試しています。私は達成したいことのために機能するこのコードを持っています:----> Pythonスレッドで実行を呼び出す前に関数を実行します。
ただし、これを行うには、常に run() メソッドで time.sleep(1) を呼び出して、execute() に進む必要があります。そうしないと、スレッドは関数の割り当てと実行なしで終了します。このタイプを実現するためのより良い方法はありますか?待っている?
python - contextlib.contextmanager を使用して定義されたコンテキスト マネージャーへの送信
コンテキストマネージャーがあるとします:
z
コンテキストマネージャーに送信するにはどうすればよいですか?
私は試した:
しかし、私はStopIterationを取得します。これは、send
利回りが原因でしょうか?
python - Python でコンテキスト マネージャーを使用する方法
以下は架空のコードです
この場合、ブロック db.close() が呼び出され、db がガベージ コレクションの対象としてマークされることを期待します。
仕事で、このコードが発生するのを見始めました。
Javaのnewキーワードのように使用する必要があるかどうかはわかりません。with を使用するときにできる/できない/すべきでないことを説明する良いドキュメントを教えてもらえますか?
PSログメッセージは実際にはそれほど不自由です:-)