异常处理¶
单击内部使用异常来表示应用程序用户可能导致的各种错误情况。主要是不正确的用法。
哪里处理错误?¶
Click的主要错误处理发生在 Command.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)
哪些例外情况存在?¶
单击有两个异常基: ClickException 对于单击希望向用户发出信号的所有异常,将引发 Abort 用于指示单击中止执行。
A ClickException 有一个 show() 方法,它可以将错误消息呈现给stderr或给定的文件对象。如果您想自己使用这个异常来做一些事情,请检查API文档,了解它们还提供了什么。
存在以下常见子类:
UsageError通知用户出了问题。BadParameter通知用户某个特定参数出了问题。这些通常在内部通过单击进行处理,如果可能,还可以添加额外的信息。例如,如果这些都是从回调中引发的,那么如果可能的话,单击将自动用参数名对其进行扩充。FileError这是由FileType如果单击在打开文件时遇到问题。