Javaのすべてのバージョンでは、リソースを手動で閉じる必要があります。通常はfinallyブロックで処理されます。 Java 7はARM(自動リソース管理)ブロックを取得しようとしています。pythonには自動リソース管理はありますか?
- まず、pythonでfinallyブロックの概念が表示されません。または、発生した例外ごとにキャッチのリソースを閉じますか?
- PythonでARMを実行するライブラリはありますか?そうでない場合は、ARMを行うためのpythonic方法は何ですか?
Javaのすべてのバージョンでは、リソースを手動で閉じる必要があります。通常はfinallyブロックで処理されます。 Java 7はARM(自動リソース管理)ブロックを取得しようとしています。pythonには自動リソース管理はありますか?
try:except:finally:in pythonがあります。
また、with:文を使用することもできます。これは、ARMのためのものです。これらはコンテキストマネージャと呼ばれます。 http://www.python.org/dev/peps/pep-0343/
とてもいいです。私はPythonに絶えず驚いています。 –
Pythonで自動化されたリソース管理があります。リソースを開いているほとんどのオブジェクトは、ガベージコレクションが行われると、リソースを閉じます。それは未定義で、まったく発生しない可能性があるので、これは非常に多くのリソースを使用していない場合にのみ機能し、プログラムが開いているときには気にしないでください。終了します。
それ以外の場合は、マシューズの回答に従ってコンテキストマネージャーとwithステートメントを使用してください。
>>> import sys
>>> class redirect_stdout:
... def __init__(self, target):
... self.stdout = sys.stdout
... self.target = target
...
... def __enter__(self):
... sys.stdout = self.target
...
... def __exit__(self, type, value, tb):
... sys.stdout = self.stdout
...
>>> from StringIO import StringIO
>>> out = StringIO()
>>> with redirect_stdout(out):
... print 'Test'
...
>>> out.getvalue() == 'Test\n'
True
てみドキュメントhttp://docs.python.org/tutorial/errors.htmlやGoogle:http://www.google.com/searchここ
は、標準出力をリダイレクトする簡単な例であります?q = exceptions + finally + pythonあなたは 'with'ステートメントに興味がありますhttp://docs.python.org/reference/compound_stmts.html#with –