mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
116 lines
7.4 KiB
ReStructuredText
116 lines
7.4 KiB
ReStructuredText
Обработка ошибок
|
|
==========================================
|
|
|
|
Конфигурация
|
|
------------
|
|
|
|
``Argenta`` в рантайме вызывает исключения в пограничных случаях пользовательского ввода.
|
|
Все исключения обрабатываются системными хэндлерами, но у вас есть возможность их переопределить. Переопределение осуществляется
|
|
с помощью сеттеров инстанса ``App`` - ``.set_*_handler(_)``, где ``_`` - это протокол хэндлера нестандартного поведения, подробнее
|
|
о каждом протоколе и соответствующем сеттере :ref:`ниже <possible_errors>`
|
|
|
|
.. note::
|
|
Все исключения никогда не остаются необработанными, так как у них есть стандартные хэндлеры. Поэтому переопределение опционально.
|
|
|
|
Краткий сэмпл кода, переопределяющего хэндлер ввода
|
|
пустой команды
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample.py
|
|
:language: python
|
|
|
|
|
|
.. _possible_errors:
|
|
|
|
Возможные исключения
|
|
--------------------
|
|
|
|
``UnprocessedInputFlagException``: Необрабатываемый ввод от пользователя
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Исключение вызывается, когда пользователь вводит команду с некорректным синтаксисом и парсер не может
|
|
*распарсить* её. В большинстве случаев это означат, что проблема в синтаксисе введённых флагов команды, подробнее о
|
|
флагах и их синтаксисе в :ref:`Flags <root_flags>`.
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
.. code-block:: shell
|
|
|
|
Incorrect flag syntax: <raw input command>
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_incorrect_input_syntax_handler(_: NonStandardBehaviorHandler[str])``,
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
к примеру функция или лямбда, которая принимает единственный аргумент - строку, которая представляет собой необработанную введённую команду, и ничего не возвращает.
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода команды с некорректным синтаксисом:
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample2.py
|
|
:language: python
|
|
|
|
---------------
|
|
|
|
``RepeatedInputFlagsException``: Повторяющийся флаг в введённой команде
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Исключение вызывается, когда пользователь вводит команду с повторяющимся флагом, флаг(:ref:`InputFlag <input_flag>`) считается повторяющимся, если
|
|
введён флаг с таким же именем, именно именем, без префикса. Подробнее о флагах и их синтаксисе в :ref:`Flags <root_flags>`.
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
.. code-block:: shell
|
|
|
|
Repeated input flags: <raw input command>
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_repeated_input_flags_handler(_: NonStandardBehaviorHandler[str])``,
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
к примеру функция или лямбда, которая принимает единственный аргумент - строку, которая представляет собой необработанную введённую команду, и ничего не возвращает.
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода команды с повторяющимися флагами:
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample3.py
|
|
:language: python
|
|
|
|
---------------
|
|
|
|
``EmptyInputCommandException``: Введена пустая команда
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Исключение вызывается, когда пользователь вводит команду в виде строки из пробельных символов - ``\n``, ``\t``, пробел и т.д.
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
.. code-block:: shell
|
|
|
|
Empty input command
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_empty_command_handler(_: EmptyCommandHandler)``,
|
|
протокол ``EmptyCommandHandler`` соответствует ``Callable[[], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
к примеру функция или лямбда, которая не принимает аргументов и ничего не возвращает.
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода пустой команды:
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample4.py
|
|
:language: python
|
|
|
|
---------------
|
|
|
|
``UnknownCommandException``: Введена неизвестная команда
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Исключение вызывается, когда пользователь вводит команду, которая не зарегистрирована ни в одном роутере и не является алиасом ни для
|
|
одной зарегистрированной команды.
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
.. code-block:: shell
|
|
|
|
Unknown command: <trigger of the input command>
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_unknown_command_handler(_: NonStandardBehaviorHandler[InputCommand])``,
|
|
протокол ``NonStandardBehaviorHandler[InputCommand]`` соответствует ``Callable[[InputCommand], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
к примеру функция или лямбда, которая принимает обязательный аргумент типа :ref:`InputCommand <input_command>` и ничего не возвращает.
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода неизвестной команды:
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample5.py
|
|
:language: python
|
|
|