异常处理——点击文档

来自菜鸟教程
Click/docs/7.x/exceptions
跳转至:导航、​搜索

异常处理

Click 在内部使用异常来表示应用程序用户可能导致的各种错误情况。 这主要是诸如不正确使用之类的事情。

错误在哪里处理?

Click 的主要错误处理发生在 BaseCommand.main() 中。 在那里它处理 ClickException 的所有子类以及标准的 EOFErrorKeyboardInterrupt 异常。 后者在内部转换为 Abort

应用的逻辑如下:

  1. 如果发生 EOFErrorKeyboardInterrupt,将其加注为 中止
  2. 如果引发 ClickException,则调用其上的 ClickException.show() 方法以显示它,然后使用 ClickException.exit_code 退出程序。
  3. 如果出现 Abort 异常,则将字符串 Aborted! 打印到标准错误,并以退出代码 1 退出程序。
  4. 如果一切顺利,用退出代码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 在打开文件时遇到问题。