返回介绍

异常处理

发布于 2025-05-06 21:24:12 字数 2041 浏览 0 评论 0 收藏

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

哪里处理错误?

Click 的主要错误处理发生在 BaseCommand.main() . 在这里,它处理所有子类 ClickException 以及标准 EOFErrorKeyboardInterrupt 例外情况。后者内部转换为 Abort .

应用的逻辑如下:

  1. 如果一个 EOFErrorKeyboardInterrupt 发生了,重估为 Abort .
  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 中止执行。

A ClickException 有一个 show() 方法,它可以将错误消息呈现给 stderr 或给定的文件对象。如果您想自己使用这个异常来做一些事情,请检查 API 文档,了解它们还提供了什么。

存在以下常见子类:

  • UsageError 通知用户出了问题。
  • BadParameter 通知用户某个特定参数出了问题。这些通常在内部通过 Click 进行处理,如果可能,还可以添加额外的信息。例如,如果这些都是从回调中引发的,那么如果可能的话,Click 将自动用参数名对其进行扩充。
  • FileError 这是由 FileType 如果 Click 在打开文件时遇到问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。