异常处理¶
Click内部使用异常提示来表示应用程序的用户设置的各种错误条件。这是使用不当所造成的。
错误在哪里处理?¶
Click的主要错误处理发生在 BaseCommand.main()
. 在那里它处理所有的子类
ClickException
以及
EOFError
和 KeyboardInterrupt
标准。后者在内部翻译成一个 Abort
.
应用的逻辑如下:
- 如果
EOFError
或者KeyboardInterrupt
发生,,将其重新评估为Abort
. - 如果出现一个
ClickException
, 调用ClickException.show()
方法来显示它,然后退出程序ClickException.exit_code
. - 如果发生
Abort
异常,则将字符串打印Aborted! 到标准错误,并使用退出代码退出程序1。 - 如果顺利通过,退出程序退出代码0。
如果我不想要呢?¶
- 一般来说,你总是可以选择自己调用
invoke()
方法。例如,如果你有一个 Command
你可以像这样手动调用它: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 具有两个异常基础: ClickException
针对所有例外情况引发的Click,这些异常是要向用户发出信号,而 Abort
用于指示Click的中止执行。
ClickException
有一个show()
方法可以将错误消息呈现给stderr或给定的文件对象。如果你想自己使用这个异常做一些检查他们提供的API文档。
以下常见存在的子类:
UsageError
通知用户出了问题。BadParameter
通知用户特定参数出现问题。这些通常在Click处理内部处理,如果可能的话,增加额外的信息。例如,如果这些是从回调引发Click,将自动增加它的参数名称。FileError
这是一个错误,FileType
Click遇到打开文件问题时会出现