問題タブ [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 投票する
5 に答える
25398 参照

python - Pythonでデコレータとコンテキストマネージャの両方として機能する関数?

これは物事を少し進めすぎている可能性がありますが、ほとんどは好奇心からです..

コンテキストマネージャーとデコレーターの両方として同時に機能する呼び出し可能なオブジェクト (関数/クラス) を持つことは可能でしょうか?

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

python - コンテキストマネージャー内の関数の部分的な適用 ("with ..")

基本的に、クラス Foo() にいくつかのメソッド Foo.bar(arg1, name) を提供する API があります。

functools.partial オブジェクトをコンテキスト マネージャー内の Foo.bar に適用する方法はありますか。つまり、次のようになります。

モンキーパッチ Foo.bar 以外に、これのためのよりエレガントな方法があるかどうか疑問に思いましたか?

編集: 要点は、次のようなコードがあることです:

ボイラープレートを追加しないと、次のコードは「モデル」への同じ呼び出しを生成するはずです。

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

python - Pythonがsqlite3カーソルのコンテキストマネージャーを作成しないのはなぜですか?

これは機能するはずですが、株式テーブルがないと言っているだけです-コンテキストマネージャー内のどこかで接続が失われたと思われますか?

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

python - Pythonで関数をコンテキストマネージャーにグローバルに置き換えることは可能ですか?

関数をグローバルに一時的に無効にするコンテキストマネージャーをPythonで作成したいと思います。そのようなことは一般的に行うことができますか?望ましい動作の例を次に示します。

lambda *args, **kwargs: None原則として、一時的に割り当てることができることは知っていx.disable_meますが、コンテキストマネージャーが実際にこれを行うのに十分な情報を持っているかどうかはわかりません。

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

python - Pythonコンテキストマネージャー:条件付きで本体を実行しますか?

私はMPIベースのアプリケーションを作成しています(ただし、MPIは私の質問では関係ありません。理由を明らかにするためだけに言及します)。場合によっては、プロセスよりも作業項目が少ない場合は、新しいコミュニケーターを作成する必要があります。何の関係もないプロセスを除いて。最後に、新しいコミュニケーターは、実行する必要のあるプロセスによって(そしてそれらによってのみ)解放される必要があります。

それを行うためのきちんとした方法は、次のように書くことです。

実行する作業があるプロセスによってのみ実行される本体。

コンテキストマネージャーに本文の実行を回避する方法はありますか?コンテキストマネージャーは制御フローを隠さないように設計されていることは理解していますが、私の場合は明確にするために正当化されると思うので、それを回避できるかどうか疑問に思います。

0 投票する
4 に答える
8646 参照

python - with ステートメントを使用する Python でコンテキスト マネージャーを作成する

他のコンテキスト マネージャーを使用するコンテキスト マネージャーを作成しようとしているので、クライアントはレシピ全体を知る必要はなく、私が提示しているインターフェイスだけを知る必要があります。私はそれを使用できません@contextmanager-例外によって中断された場合、呼び出し後のコードyieldは実行されないため、クラスベースのマネージャーを使用する必要があります。

スクリプトの例を次に示します。

それはこれを出力します:

これを出力したい:

クラスベースのコンテキスト マネージャーに他のコンテキスト マネージャーをラップするように指示する方法はありますか?

0 投票する
4 に答える
565 参照

python - マクロ スタイルのクラス メソッドをデコレータに置き換えますか?

デコレーターに関する多くの記事を読んだにもかかわらず、デコレーターをよく理解するのに苦労しています ([this][1] SO で非常に人気のある記事を含む)。私は自分がバカに違いないのではないかと疑っていますが、バカであることに伴うすべての頑固さを考えて、これを理解しようと決心しました。

それ、そして私は良いユースケースを持っていると思います...

以下は、PDF ファイルからテキストを抽出する私のプロジェクトのコードです。処理には次の 3 つの手順が含まれます。

  1. PDF ファイルの処理に必要な PDFMiner オブジェクトをセットアップします (ボイラープレートの初期化)。
  2. PDF ファイルに処理関数を適用します。
  3. 何が起こっても、ファイルを閉じてください。

私は最近、コンテキスト マネージャーとwithステートメントについて学びましたが、これは彼らにとって良いユース ケースのように思えました。PDFMinerWrapperそのため、クラスを定義することから始めました。

これで、PDF ファイルを簡単に操作できるようになり、エラーが適切に処理されることを確認できるようになりました。理論的には、私がする必要があるのは次のようなことだけです:

によって返されたオブジェクトに関数を適用する前に、PDF ドキュメントが抽出可能であることを確認する必要があることを除けば、これは素晴らしいことPDFMinerWrapperです。私の現在の解決策には、中間ステップが含まれます。

私はPamplemousse、PDFを操作するためのインターフェースとして機能するクラスを呼び出しています。次に、PDFMinerWrapperオブジェクトがリンクされているファイルに対して操作を実行する必要があるたびに使用します。

以下は、その使用法を示す (要約された) コードです。

PDF ファイルに対して操作を実行したいときはいつでも、関連する関数をwith_pdfその引数とともにメソッドに渡します。次にwith_pdf、メソッドはwithステートメントを使用してコンテキストマネージャーを活用しPDFMinerWrapper(したがって、例外の適切な処理を保証します)、渡された関数を実際に適用する前にチェックを実行します。

私の質問は次のとおりです。

を明示的に呼び出す必要がないように、このコードを単純化したいと思いますPamplemousse.with_pdf。私の理解では、デコレータがここで役立つ可能性があるため、次のようになります。

  1. withステートメントを呼び出して抽出可能性チェックを実行するデコレータをどのように実装すればよいでしょうか?
  2. デコレータをクラス メソッドにすることは可能ですか?それとも、デコレータを自由形式の関数またはクラスにする必要がありますか?
0 投票する
1 に答える
6077 参照

python - Python: クラス メソッドで contextmanager を使用すると予期しない動作が発生する

Python で with..as 構造を使用して、「可逆コンピューティング」コードを簡単に記述できるようにしようとしています。ただし、@contextmanagerクラス メソッドで使用すると、将来のクラス インスタンスのデフォルトの初期化が変更されるようです。Python 2.6 と 3.1 の動作は同じです。この動作を示す簡単な例を次に示します。


  • SL2の新しいインスタンスではないのはなぜSymListですか?
  • データ メンバーはデータ メンバーをどのようにSL2.L参照していSL.Lますか?
0 投票する
3 に答える
30708 参照

python - StringIOおよび'with'ステートメントとの互換性(コンテキストマネージャー)

ファイル名を引数として取り、ファイルの内容を処理するレガシー関数を備えたレガシーコードがいくつかあります。コードの実用的な複製は以下のとおりです。

私がやりたいのは、このレガシー関数を使用するために生成したコンテンツをディスクに書き込む必要がないためStringIO、物理ファイル名の代わりにオブジェクトを作成するために使用できます。ただし、以下に示すように、これは機能しません。

StringIO私はこれで行く方法だと思いました。このレガシー関数を使用して、ディスク上のファイルではないが、レガシー関数によってそのように扱うことができる何かを引数に渡す方法があるかどうか誰かに教えてもらえますか?レガシー関数には、パラメーター値withの処理を行うコンテキストマネージャーがあります。filename

私がグーグルで出くわした1つのことは:http://bugs.python.org/issue1286でした、しかしそれは私を助けませんでした...

コード

出力

これは次の出力ですFileOnDisk.txt

これはエラーです: