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

python - コンテキストマネージャへの引数に基づいてコードブロックを省略する方法は?

この例を見てみましょう:

引数に基づいてコンテキスト マネージャ内でコード ブロック () を実行しない方法はありますか? たとえば、arg2 が False でない場合は?print 'Executed'

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

python - Python での try と with の正しい順序について混乱しています

ここで、 と のペアを使用するwith open(filename)代わりに使用することをお勧めし(少なくとも基本的なタスクでは)、 を使用する方が良いことも読みました。open(filename)filename.close()try

Q1: 私の理解が正しければ、適切な順序は何ですか?

また

Q2: ファイル処理エラーのポップアップを表示するコードも挿入したい場合、どのケースが適していますか? (ファイルが見つからない、または何か)

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

python - Python のエラー ハンドラ

これを行うための「pythonic」な方法を見つけるのに苦労しています。同じtry-exceptパターンで異なるコード ブロックをキャッチする必要があります。キャッチするブロックはそれぞれ異なります。現在、コードのいくつかのポイントで、例外の長いリストを使用して、同じtry-exceptパターンを繰り返しています。

with ステートメントコンテキスト マネージャーデコレーターを使用して、これを解決する良い方法があります。

しかし、ブロックに例外があったかどうかを知る必要がある場合はどうなりますか? つまり、前のwith ブロックtry-except-else のようなことを行う代替手段はありますか?

使用例:

同じtry-exceptパターンを何度も繰り返さないように、pythonicな方法でそのようなことをすることはできますか?

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

python - 例外を発生させずに親関数から戻るコンテキスト マネージャー

コンテキストマネージャーはreturn、例外を処理するときにその機能を引き起こすことができますか?

私が書いているいくつかのメソッドに共通する try-except パターンがあり、コンテキストマネージャーでそれを乾燥させたいと思っています。がある場合、関数は処理を停止する必要がありExceptionます。

これが私の現在の実装の例です:

try-except を DRY して、発生した場合にタスク ハンドラ関数が返されるようにする方法はありますSomeErrorか?

注:タスク ハンドラーは、タスク ハンドラー関数から生成された例外を処理しないライブラリ内のコードによって呼び出されています。

これは 1 つの試行ですが、次の原因になりますUnboundLocalError

コンテキスト マネージャを使用してこのパターンを DRY することは可能ですか、それとも別の方法がありますか?

0 投票する
5 に答える
3016 参照

python - Python で変数の値を一時的に変更する

Python 3.4 は、stdout を一時的にリダイレクトするためのこのきちんとしたツールを提供します。

コードはそれほど複雑ではありませんが、何度も何度も書きたくありません。

withステートメントを使用して変数の値を一時的に変更する一般的な方法があるかどうか疑問に思っています。の他の 2 つの使用例syssys.stderr、 とsys.excepthookです。

完璧な世界では、次のようなものが機能します。

私はそれを機能させることができるとは思っていませんが、おそらく次のようなことが可能です:

を根回しすることでこれを機能させることができますが、globals()誰もが使用することを選択するものではありません.

更新: 私の「foo = 10」の例は、私がやろうとしていることを明確にしたと思いますが、実際の使用例を伝えていません。ここに2つあります:

  1. redirect_stdout と同じように stderr をリダイレクトします。
  2. sys.excepthook を一時的に変更します。私はインタラクティブに多くの開発を行っており、excepthook に何かを追加するとき (たとえば、logging モジュールを使用して例外をログに記録するために、元の関数を独自の関数にラップすることによって)、ある時点でそれを削除したいと考えています。そうすれば、関数ラッピング自体のコピーがますます増えなくなります。この質問は、密接に関連する問題に直面しています。