例外処理—ドキュメントをクリックします
提供:Dev Guides
Click/docs/7.x/exceptions
例外処理
Clickは内部的に例外を使用して、アプリケーションのユーザーが引き起こした可能性のあるさまざまなエラー状態を通知します。 主に、これは誤った使用法のようなものです。
エラーはどこで処理されますか?
クリックの主なエラー処理は BaseCommand.main()で発生しています。 そこでは、 ClickException のすべてのサブクラスと、標準のEOFError
およびKeyboardInterrupt
例外を処理します。 後者は内部的に Abort に変換されます。
適用されるロジックは次のとおりです。
EOFError
またはKeyboardInterrupt
が発生した場合は、 Abort として再レイズします。- ClickException が発生した場合は、
ClickException.show()
メソッドを呼び出して表示し、ClickException.exit_code
でプログラムを終了します。 - Abort 例外が発生した場合は、文字列
Aborted!
を標準エラーに出力し、終了コード1
でプログラムを終了します。 - うまくいったら、終了コード
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
によって発生するエラーです。