optparse を使う場合に気を付けねばならないエラーには、
大きく分けてプログラマ側のエラーとユーザ側のエラーという二つの種類があります。
プログラマ側のエラーの多くは、例えば不正なオプション文字列や定義されていない
オプション属性の指定、あるいはオプション属性を指定し忘れるといった、
誤ったparse.add_option()
呼び出しによるものです。
こうした誤りは通常通りに処理されます。すなわち、例外(optparse.OptionError
や TypeError
) を送出して、プログラムをクラッシュさせます。
もっと重要なのはユーザ側のエラーの処理です。というのも、ユーザの操作エラーという
ものはコードの安定性に関係なく起こるからです。
optparse は、誤ったオプション引数の指定 (整数を引数にとるオプション
-n に対して "-n4x"
と指定してしまうなど) や、引数を
指定し忘れた場合 (-n が何らかの引数をとるオプションであるのに、
"-n"
が引数の末尾に来ている場合) といった、ユーザによるエラーを自動的に
検出します。また、アプリケーション側で定義されたエラー条件が起きた場合、
parser.error()
を呼び出してエラーを通知できます:
(options, args) = parser.parse_args() [...] if options.a and options.b: parser.error("options -a and -b are mutually exclusive")
いずれの場合にも optparse はエラーを同じやり方で処理します。すなわち、 プログラムの使用法メッセージとエラーメッセージを標準エラー出力に出力して、 終了ステータス 2 でプログラムを終了させます。
上に挙げた最初の例、すなわち整数を引数にとるオプションにユーザが "4x"
を
指定した場合を考えてみましょう:
$ /usr/bin/foo -n 4x usage: foo [options] foo: error: option -n: invalid integer value: '4x'
値を全く指定しない場合には、以下のようになります:
$ /usr/bin/foo -n usage: foo [options] foo: error: -n option requires an argument
optparse は、常にエラーを引き起こしたオプションについて説明の入った
エラーメッセージを生成するよう気を配ります; 従って、parser.error()
を
アプリケーションコードから呼び出す場合にも、同じようなメッセージになるように
してください。
optparse のデフォルトのエラー処理動作が気に入らないのなら、
OptionParser をサブクラス化して、exit()
かつ/または
error() をオーバライドする必要があります。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。