异常处理¶
单击内部使用异常来表示应用程序用户可能导致的各种错误情况。主要是不正确的用法。
哪里处理错误?¶
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
如果单击在打开文件时遇到问题。