##
11.5.2 OpenerDirector オブジェクト

`OpenerDirector` インスタンスは以下のメソッドを持っています:

`add_handler`( | handler)

  handler は `BaseHandler` のインスタンスでなければ なりません。以下のメソッドを使った検索が行われ、URL を取り扱うことが 可能なハンドラの連鎖が追加されます。

  - `protocol_open()` -- ハンドラが protocol の URL を開く方法を知っているかどうかを 調べます。
  - `protocol_error_type()` -- ハンドラが protocol から返される type エラーの扱い方を知っているかどうかを調べます。

`close`( | )

  循環参照を明示的にやめさせて、全てのハンドラを削除します。 `OpenerDirector` は登録されているハンドラを参照する必要があり、 ハンドラは自分を呼び出す `OpenerDirector` を参照する必要が あるため、循環参照が生まれます。最近のバージョンの Python では 循環参照を修正しますが、たまに明示的に循環参照をやめさせた方が よいことがあります。

`open`( | url[, data])

  与えられた url (リクエストオブジェクトでも文字列でも かまいません) を開きます。オプションとして data を与えることが できます。 引数、返り値、および送出される例外は `urlopen()` と同じ です (`urlopen()` の場合、標準でインストールされている `OpenerDirector` の `open()` メソッドを呼び出します) 。

`error`( | proto[, arg[, ...]])

  与えられたプロトコルにおけるエラーを処理します。このメソッドは 与えられたプロトコルにおける登録済みのエラーハンドラを (プロトコル固有の) 引数で呼び出します。 HTTP プロトコルは特殊な ケースで、特定のエラーハンドラを選び出すのに HTTP レスポンスコード を使います; ハンドラクラスの `http_error_*()` メソッドを 参照してください。

  返り値および送出される例外は `urlopen()` と同じものです。