with statement
Python で( PEP 343 ) を使用して、コンテキストの後にリソースのクリーンアップを自動的に管理するという問題が発生しました。特に、with statement
リソースのクリーンアップ方法が であると常に仮定し.close()
ます。次のコード ブロックの IE は、browser.close()
実行がコンテキストを使い果たしたときに自動的に呼び出されますがbrowser.close()
、ブラウザー全体ではなく現在のウィンドウを閉じるだけなので、適切なクリーンアップではありません。すべきだったのは、 を呼び出すことbrowser.quit()
です。
with contextlib.closing(webdriver.Firefox()) as browser:
# do something with browser
# at this point browser.close() has been called.
残念ながら、ここでcontextlib.closing
明らかなように、呼び出されるクリーンアップ メソッド名をカスタマイズする方法は提供されていません。
def __exit__(self, *exc_info):
self.thing.close()
ただし、引数exec_info
があることに気付きましたが、その特定のメソッドでは使用されませんでした。理由を知っている人はいますか?
より大きな問題は、タイトルが示唆しているように、可能であれば、self.thing を任意のクリーンアップ メソッドを呼び出す方法ですか? そうでない場合、最善の回避策は何ですか? フォールバックして使用する必要がありますtry...finally
か?