例外処理—ドキュメントをクリックします

提供:Dev Guides
Click/docs/7.x/exceptions
移動先:案内検索

例外処理

Clickは内部的に例外を使用して、アプリケーションのユーザーが引き起こした可能性のあるさまざまなエラー状態を通知します。 主に、これは誤った使用法のようなものです。

エラーはどこで処理されますか?

クリックの主なエラー処理は BaseCommand.main()で発生しています。 そこでは、 ClickException のすべてのサブクラスと、標準のEOFErrorおよびKeyboardInterrupt例外を処理します。 後者は内部的に Abort に変換されます。

適用されるロジックは次のとおりです。

  1. EOFErrorまたはKeyboardInterruptが発生した場合は、 Abort として再レイズします。
  2. ClickException が発生した場合は、ClickException.show()メソッドを呼び出して表示し、ClickException.exit_codeでプログラムを終了します。
  3. Abort 例外が発生した場合は、文字列Aborted!を標準エラーに出力し、終了コード1でプログラムを終了します。
  4. うまくいったら、終了コード0でプログラムを終了します。


それが欲しくない場合はどうなりますか?

通常、invoke()メソッドを自分で呼び出すオプションは常にあります。 たとえば、コマンドがある場合は、次のように手動で呼び出すことができます。

ctx = command.make_context('command-name', ['args', 'go', 'here'])
with ctx:
    result = command.invoke(ctx)

この場合、例外はまったく処理されず、予想どおりにバブルアップします。

Click 3.0以降では、Command.main()メソッドを使用することもできますが、スタンドアロンモードを無効にすると、例外処理を無効にすることと、最後に暗黙的なsys.exit()を無効にすることができます。

したがって、次のようなことができます。

command.main(['command-name', 'args', 'go', 'here'],
             standalone_mode=False)

どの例外が存在しますか?

Clickには2つの例外ベースがあります。Clickがユーザーに通知するすべての例外に対して発生する ClickException と、Clickに実行を中止するように指示するために使用される Abort です。

ClickException にはshow()メソッドがあり、stderrまたは指定されたファイルオブジェクトにエラーメッセージを表示できます。 自分で例外を使用して何かを実行したい場合は、APIドキュメントで他に何が提供されているかを確認してください。

次の一般的なサブクラスが存在します。

  • UsageError は、問題が発生したことをユーザーに通知します。
  • BadParameter は、特定のパラメーターで問題が発生したことをユーザーに通知します。 これらは多くの場合、Clickで内部的に処理され、可能であれば追加情報で補強されます。 たとえば、それらがコールバックから発生した場合、Clickは、可能であればパラメータ名で自動的に拡張します。
  • FileError これは、クリックでファイルを開く際に問題が発生した場合にFileTypeによって発生するエラーです。