pytho****@googl*****
pytho****@googl*****
2011年 3月 19日 (土) 19:38:28 JST
3 new revisions: Revision: d9a3fededf67 Author: Nozomu Kaneko <nozom****@gmail*****> Date: Thu Mar 17 11:17:03 2011 Log: 2.6.6: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=d9a3fededf67 Revision: ecfd4206a92d Author: Nozomu Kaneko <nozom****@gmail*****> Date: Sat Mar 19 03:35:22 2011 Log: 原文を追加: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=ecfd4206a92d Revision: 0eab3ff6e0bc Author: Nozomu Kaneko <nozom****@gmail*****> Date: Sat Mar 19 03:35:39 2011 Log: 翻訳の見直し: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=0eab3ff6e0bc ============================================================================== Revision: d9a3fededf67 Author: Nozomu Kaneko <nozom****@gmail*****> Date: Thu Mar 17 11:17:03 2011 Log: 2.6.6: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=d9a3fededf67 Modified: /library/contextlib.rst ======================================= --- /library/contextlib.rst Sun May 23 21:51:56 2010 +++ /library/contextlib.rst Thu Mar 17 11:17:03 2011 @@ -1,6 +1,5 @@ - -:mod:`contextlib` --- :keyword:`with` \ -構文コンテキストのためのユーティリ ティ。 -================================================================================= +:mod:`contextlib` --- :keyword:`with` \ -構文コンテキストのためのユーティリ ティ +=============================================================================== .. module:: contextlib :synopsis: with-構文コンテキストのためのユーティリティ。 ============================================================================== Revision: ecfd4206a92d Author: Nozomu Kaneko <nozom****@gmail*****> Date: Sat Mar 19 03:35:22 2011 Log: 原文を追加: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=ecfd4206a92d Modified: /library/contextlib.rst ======================================= --- /library/contextlib.rst Thu Mar 17 11:17:03 2011 +++ /library/contextlib.rst Sat Mar 19 03:35:22 2011 @@ -7,18 +7,35 @@ .. versionadded:: 2.5 +.. This module provides utilities for common tasks involving the :keyword:`with` +.. statement. For more information see also :ref:`typecontextmanager` and +.. :ref:`context-managers`. + このモジュールは :keyword:`with` 文を必要とする一般的なタスクのためのユーテ ィリティを提供します。 詳しい情報は、 :ref:`typecontextmanager` と :ref:`context-managers` を参照 してください。 + +.. Functions provided: + 用意されている関数: .. function:: contextmanager(func) + .. This function is a :term:`decorator` that can be used to define a factory + .. function for :keyword:`with` statement context managers, without needing to + .. create a class or separate :meth:`__enter__` and :meth:`__exit__` methods. + この関数はデコレータ(:term:`decorator`)であり、 :keyword:`with` 文コンテ キストマネージャのためのファクトリ関数の定義に利用できます。 ファクトリ関数を定義するために、クラスあるいは別の :meth:`__enter__` と :meth:`__exit__` メソッドを作る必要はありません。 - 簡単な例(実際にHTMLを生成する方法としてはお勧めできません!):: + + .. A simple example (this is not recommended as a real way of generating HTML!): + + 簡単な例(実際にHTMLを生成する方法としてはお勧めできません!) + + + :: from contextlib import contextmanager @@ -35,9 +52,27 @@ foo </h1> + + .. The function being decorated must return a :term:`generator`-iterator when + .. called. This iterator must yield exactly one value, which will be bound to + .. the targets in the :keyword:`with` statement's :keyword:`as` clause, if any. + デコレートされた関数は呼び出されたときにジェネレータ (:term:`generator`)-イテレータを返します。このイテレータは値をちょうど一つ yieldしなければなりません。 :keyword:`with` 文の :keyword:`as` 節が存在するなら、その値がas節のター ゲットへ束縛されることになります。 + + .. At the point where the generator yields, the block nested in the :keyword:`with` + .. statement is executed. The generator is then resumed after the block is exited. + .. If an unhandled exception occurs in the block, it is reraised inside the + .. generator at the point where the yield occurred. Thus, you can use a + .. :keyword:`try`...\ :keyword:`except`...\ :keyword:`finally` statement to trap + .. the error (if any), or ensure that some cleanup takes place. If an exception is + .. trapped merely in order to log it or to perform some action (rather than to + .. suppress it entirely), the generator must reraise that exception. Otherwise the + .. generator context manager will indicate to the :keyword:`with` statement that + .. the exception has been handled, and execution will resume with the statement + .. immediately following the :keyword:`with` statement. + ジェネレータがyieldするところで、 :keyword:`with` 文のネストされたブロッ クが実行されます。 ジェネレータはブロックから出た後に再開されます。ブロック内で処理されない 例外が発生した場合は、 yieldが起きた場所でジェネレータ内部へ再送出されます。 このように、(もしあれば)エラーを捕捉したり、後片付け処理を確実に実行し たりするために、 :keyword:`try`...\ @@ -50,16 +85,30 @@ .. function:: nested(mgr1[, mgr2[, ...]]) + .. Combine multiple context managers into a single nested context manager. + 複数のコンテキストマネージャを一つのネストされたコンテキストマネージャへ 結合します。 - このようなコードは:: + + .. Code like this: + + このようなコードは + + + :: from contextlib import nested with nested(A(), B(), C()) as (X, Y, Z): do_something() - これと同等です:: + + .. is equivalent to this: + + これと同等です: + + + :: m1, m2, m3 = A(), B(), C() with m1 as X: @@ -67,6 +116,16 @@ with m3 as Z: do_something() + + .. Note that if the :meth:`__exit__` method of one of the nested context managers + .. indicates an exception should be suppressed, no exception information will be + .. passed to any remaining outer context managers. Similarly, if the + .. :meth:`__exit__` method of one of the nested managers raises an exception, any + .. previous exception state will be lost; the new exception will be passed to the + .. :meth:`__exit__` methods of any remaining outer context managers. In general, + .. :meth:`__exit__` methods should avoid raising exceptions, and in particular they + .. should not re-raise a passed-in exception. + ネストされたコンテキストマネージャの一つの :meth:`__exit__` メソッドに止 めるべき例外がある場合は、残りの外側のコンテキストマネージャすべてに 例外情報が渡されないということに注意してください。同じように、ネストされ たマネージャの一つの :meth:`__exit__` メソッドが 例外を送出したならば、どんな以前の例外状態も失われ、新しい例外が残りすべ ての外側にあるコンテキストマネージャの @@ -76,7 +135,13 @@ .. function:: closing(thing) - ブロックの完了時に *thing* を閉じるコンテキストマネージャを返します。こ れは基本的に以下と等価です:: + .. Return a context manager that closes *thing* upon completion of the block. This + .. is basically equivalent to: + + ブロックの完了時に *thing* を閉じるコンテキストマネージャを返します。こ れは基本的に以下と等価です + + + :: from contextlib import contextmanager @@ -87,7 +152,13 @@ finally: thing.close() - そして、明確に ``page`` を閉じる必要なしに、このように書くことができま す:: + + .. And lets you write code like this: + + そして、明確に ``page`` を閉じる必要なしに、このように書くことができま す: + + + :: from contextlib import closing import urllib @@ -96,11 +167,19 @@ for line in page: print line + + .. without needing to explicitly close ``page``. Even if an error occurs, + .. ``page.close()`` will be called when the :keyword:`with` block is exited. + たとえエラーが発生したとしても、 :keyword:`with` ブロックを出るときに ``page.close()`` が呼ばれます。 .. seealso:: :pep:`0343` - The "with" statement + + .. The specification, background, and examples for the Python :keyword:`with` + .. statement. + 仕様、背景、および、Python :keyword:`with` 文の例。 ============================================================================== Revision: 0eab3ff6e0bc Author: Nozomu Kaneko <nozom****@gmail*****> Date: Sat Mar 19 03:35:39 2011 Log: 翻訳の見直し: library/contextlib.rst http://code.google.com/p/python-doc-ja/source/detail?r=0eab3ff6e0bc Modified: /library/contextlib.rst ======================================= --- /library/contextlib.rst Sat Mar 19 03:35:22 2011 +++ /library/contextlib.rst Sat Mar 19 03:35:39 2011 @@ -11,13 +11,13 @@ .. statement. For more information see also :ref:`typecontextmanager` and .. :ref:`context-managers`. -このモジュールは :keyword:`with` 文を必要とする一般的なタスクのためのユーテ ィリティを提供します。 +このモジュールは :keyword:`with` 構文に関わる一般的なタスクのためのユーティ リティを提供します。 詳しい情報は、 :ref:`typecontextmanager` と :ref:`context-managers` を参照 してください。 .. Functions provided: -用意されている関数: +提供されている関数: .. function:: contextmanager(func) @@ -26,8 +26,10 @@ .. function for :keyword:`with` statement context managers, without needing to .. create a class or separate :meth:`__enter__` and :meth:`__exit__` methods. - この関数はデコレータ(:term:`decorator`)であり、 :keyword:`with` 文コンテ キストマネージャのためのファクトリ関数の定義に利用できます。 - ファクトリ関数を定義するために、クラスあるいは別の :meth:`__enter__` と :meth:`__exit__` メソッドを作る必要はありません。 + この関数は :keyword:`with` 構文コンテキストマネージャのファクトリ関数を + 定義するためのデコレータ (:term:`decorator`) です。 + 新しいクラスを作ったり :meth:`__enter__` と :meth:`__exit__` のメソッド を + 別々にしなくても、ファクトリ関数を定義することができます。 .. A simple example (this is not recommended as a real way of generating HTML!): @@ -57,8 +59,9 @@ .. called. This iterator must yield exactly one value, which will be bound to .. the targets in the :keyword:`with` statement's :keyword:`as` clause, if any. - デコレートされた関数は呼び出されたときにジェネレータ (:term:`generator`)-イテレータを返します。このイテレータは値をちょうど一つ yieldしなければなりません。 - :keyword:`with` 文の :keyword:`as` 節が存在するなら、その値がas節のター ゲットへ束縛されることになります。 + デコレート対象の関数は呼び出されたときにジェネレータ (:term:`generator`)-イテレータを返す必要があります。 + このイテレータは値をちょうど一つ yield しなければなりません。 + :keyword:`with` 構文の :keyword:`as` 節が存在するなら、その値は as 節の ターゲットへ束縛されることになります。 .. At the point where the generator yields, the block nested in the :keyword:`with` @@ -73,14 +76,16 @@ .. the exception has been handled, and execution will resume with the statement .. immediately following the :keyword:`with` statement. - ジェネレータがyieldするところで、 :keyword:`with` 文のネストされたブロッ クが実行されます。 - ジェネレータはブロックから出た後に再開されます。ブロック内で処理されない 例外が発生した場合は、 yieldが起きた場所でジェネレータ内部へ再送出されます。 - このように、(もしあれば)エラーを捕捉したり、後片付け処理を確実に実行し たりするために、 :keyword:`try`...\ - :keyword:`except`...\ :keyword:`finally` 文を使うことができます。 - 単に例外のログをとるためだけに、もしくは(完全に例外を抑えてしまうのでは なく) - あるアクションを実行するだけに例外を捕まえるなら、ジェネレータはその例外 を再送出しなければなりません。 - そうしないと、ジェネレータコンテキストマネージャは例外が処理され た :keyword:`with` 文を指しており、 - その :keyword:`with` 文のすぐ後につづく文から実行を再開します。 + ジェネレータが yield を実行した箇所で :keyword:`with` 文のネストされたブ ロックが実行されます。 + ブロックから抜けた後でジェネレータは再開されます。 + ブロック内で処理されない例外が発生した場合は、ジェネレータ内部の yield を実行した箇所で例外が再送出されます。 + このように、(もしあれば)エラーを捕捉したり、クリーンアップ処理を確実に 実行したりするために、 + :keyword:`try`...\ :keyword:`except`...\ :keyword:`finally` 構文を使うこ とができます。 + 例外を捕捉する目的が、(完全に例外を抑制してしまうのではなく) + 単に例外のログをとるため、もしくはあるアクションを実行するためなら、 + ジェネレータはその例外を再送出しなければなりません。 + 例外を再送出しない場合、ジェネレータコンテキストマネージャ は :keyword:`with` 文に対して + 例外が処理されたことを示し、 :keyword:`with` 文の直後の文から実行を再開 します。 .. function:: nested(mgr1[, mgr2[, ...]]) @@ -126,10 +131,13 @@ .. :meth:`__exit__` methods should avoid raising exceptions, and in particular they .. should not re-raise a passed-in exception. - ネストされたコンテキストマネージャの一つの :meth:`__exit__` メソッドに止 めるべき例外がある場合は、残りの外側のコンテキストマネージャすべてに - 例外情報が渡されないということに注意してください。同じように、ネストされ たマネージャの一つの :meth:`__exit__` メソッドが - 例外を送出したならば、どんな以前の例外状態も失われ、新しい例外が残りすべ ての外側にあるコンテキストマネージャの - :meth:`__exit__` メソッドに渡されます。一般的に :meth:`__exit__` メソッ ドが例外を送出することは避けるべきであり、 + ネストされたコンテキストマネージャのうちのいずれかの :meth:`__exit__` メ ソッドが + 例外を抑制すべきと判断した場合、外側にある残りのすべてのコンテキストマ ネージャに + 例外情報が渡されないということに注意してください。同様に、ネストされた + コンテキストマネージャのうちのいずれかの :meth:`__exit__` メソッドが例外 を送出したならば、 + それ以前の例外状態は失われ、新しい例外が外側にある残りのすべての + コンテキストマネージャの :meth:`__exit__` メソッドに渡されます。 + 一般的に :meth:`__exit__` メソッドが例外を送出することは避けるべきであ り、 特に渡された例外を再送出すべきではありません。 @@ -138,7 +146,7 @@ .. Return a context manager that closes *thing* upon completion of the block. This .. is basically equivalent to: - ブロックの完了時に *thing* を閉じるコンテキストマネージャを返します。こ れは基本的に以下と等価です + ブロックの完了時に *thing* を close するコンテキストマネージャを返しま す。これは基本的に以下と等価です :: @@ -155,7 +163,7 @@ .. And lets you write code like this: - そして、明確に ``page`` を閉じる必要なしに、このように書くことができま す: + そして、明示的に ``page`` を close する必要なしに、このように書くことが できます: ::