异常处理——点击文档
来自菜鸟教程
Click/docs/8.0.x/exceptions
异常处理
Click 在内部使用异常来表示应用程序用户可能导致的各种错误情况。 这主要是诸如不正确使用之类的事情。
错误在哪里处理?
Click 的主要错误处理发生在 BaseCommand.main() 中。 在那里它处理 ClickException 的所有子类以及标准的 EOFError
和 KeyboardInterrupt
异常。 后者在内部转换为 Abort。
应用的逻辑如下:
- 如果发生
EOFError
或KeyboardInterrupt
,将其加注为 中止 。 - 如果引发 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 在打开文件时遇到问题。