[解決済み] Pythonの条件付きwith文
2023-01-10 23:30:53
質問
コードのブロックをwith文で始める方法はありますか?ただし、条件付きで。
のようなものです。
if needs_with():
with get_stuff() as gs:
# do nearly the same large block of stuff,
# involving gs or not, depending on needs_with()
明確にするために、あるシナリオではブロックが with 文に包まれており、別の可能性では同じブロックが包まれていない(すなわち、インデントされていないように)ことになります。
もちろん、初期の実験ではインデント エラーが発生します...。
どのように解決するのですか?
コードの重複を避けたい場合、Pythonの3.7より前のバージョンを使っている場合(その時
contextlib.nullcontext
が導入された)、あるいは 3.3 よりも前のバージョンの Python を使っている場合。
contextlib.ExitStack
が導入されたとき)、次のようなことができます。
class dummy_context_mgr():
def __enter__(self):
return None
def __exit__(self, exc_type, exc_value, traceback):
return False
または
import contextlib
@contextlib.contextmanager
def dummy_context_mgr():
yield None
として使用します。
with get_stuff() if needs_with() else dummy_context_mgr() as gs:
# do stuff involving gs or not
あるいは
get_stuff()
に基づいて異なるものを返すようにすることもできます。
needs_with()
.
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] バブルソートの宿題
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?