Spec-Zone.ru › click

Обработка исключений

Библиотека Click использует исключения для сигнализации о различных ошибках, которые могут возникнуть у пользователя приложения. В основном это неправильное использование.

Где обрабатываются ошибки?

Основная обработка ошибок Click происходит в BaseCommand.main(). Там она обрабатывает все подклассы ClickException, а также стандартные исключения EOFError и KeyboardInterrupt. Последние внутренне преобразуются в Abort.

Применяемая логика следующая:

  1. Если происходит EOFError или KeyboardInterrupt, перевыбросьте его как 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 прервать выполнение.

У ClickException есть метод show(), который может отобразить сообщение об ошибке в stderr или в указанный объект файла. Если вы хотите использовать исключение самостоятельно для выполнения каких-либо действий, ознакомьтесь с документацией API, чтобы узнать, что ещё они предоставляют.

Существуют следующие распространённые подклассы:

  • UsageError для информирования пользователя о возникновении проблемы.
  • BadParameter для информирования пользователя о проблеме со специфическим параметром. Часто эти исключения обрабатываются внутри Click и, при возможности, дополняются дополнительной информацией. Например, если они генерируются из обратного вызова, Click автоматически дополнит их именем параметра, если это возможно.
  • FileError - это ошибка, которая возникает, когда FileType сталкивается с проблемами при открытии файла.

© Copyright 2014 Pallets.
Licensed under the BSD 3-Clause License.
We are not supported nor endorsed by Pallets.
https://click.palletsprojects.com/en/8.1.x/exceptions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API