|
|
|
@@ -1,3 +1,5 @@
|
|
|
|
|
.. _root_error_handling:
|
|
|
|
|
|
|
|
|
|
Обработка ошибок
|
|
|
|
|
==========================================
|
|
|
|
|
|
|
|
|
@@ -12,7 +14,7 @@
|
|
|
|
|
.. note::
|
|
|
|
|
Все исключения никогда не остаются необработанными, так как у них есть стандартные хэндлеры. Поэтому переопределение опционально.
|
|
|
|
|
|
|
|
|
|
Краткий сэмпл кода, переопределяющего хэндлер ввода
|
|
|
|
|
Краткий сэмпл кода, переопределяющего хэндлер ввода
|
|
|
|
|
пустой команды
|
|
|
|
|
|
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample.py
|
|
|
|
@@ -28,7 +30,7 @@
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Исключение вызывается, когда пользователь вводит команду с некорректным синтаксисом и парсер не может
|
|
|
|
|
*распарсить* её. В большинстве случаев это означат, что проблема в синтаксисе введённых флагов команды, подробнее о
|
|
|
|
|
*распарсить* её. В большинстве случаев это означат, что проблема в синтаксисе введённых флагов команды, подробнее о
|
|
|
|
|
флагах и их синтаксисе в :ref:`Flags <root_flags>`.
|
|
|
|
|
|
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
@@ -36,9 +38,9 @@
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
Incorrect flag syntax: <raw input command>
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_incorrect_input_syntax_handler(_: NonStandardBehaviorHandler[str])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_incorrect_input_syntax_handler(_: NonStandardBehaviorHandler[str])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
к примеру функция или лямбда, которая принимает единственный аргумент - строку, которая представляет собой необработанную введённую команду, и ничего не возвращает.
|
|
|
|
|
|
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода команды с некорректным синтаксисом:
|
|
|
|
@@ -51,26 +53,29 @@
|
|
|
|
|
``RepeatedInputFlagsException``: Повторяющийся флаг в введённой команде
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Исключение вызывается, когда пользователь вводит команду с повторяющимся флагом, флаг(:ref:`InputFlag <input_flag>`) считается повторяющимся, если
|
|
|
|
|
введён флаг с таким же именем, именно именем, без префикса. Подробнее о флагах и их синтаксисе в :ref:`Flags <root_flags>`.
|
|
|
|
|
Исключение вызывается, когда пользователь вводит команду с повторяющимся флагом, пара введённых флагов(:ref:`InputFlag <input_flag>`) считается
|
|
|
|
|
равной, если у них одинаковые имена. Подробнее о флагах и их синтаксисе в :ref:`Flags <root_flags>`.
|
|
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
Сравнение на равенство у регистрируемых флагов(Flag) происходит иначе, подробнее в :ref:`Flag <root_flags>`.
|
|
|
|
|
|
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
|
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
Repeated input flags: <raw input command>
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_repeated_input_flags_handler(_: NonStandardBehaviorHandler[str])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_repeated_input_flags_handler(_: NonStandardBehaviorHandler[str])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[str]`` соответствует ``Callable[[str], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
к примеру функция или лямбда, которая принимает единственный аргумент - строку, которая представляет собой необработанную введённую команду, и ничего не возвращает.
|
|
|
|
|
|
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода команды с повторяющимися флагами:
|
|
|
|
|
|
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample3.py
|
|
|
|
|
:language: python
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``EmptyInputCommandException``: Введена пустая команда
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
@@ -81,22 +86,22 @@
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
Empty input command
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_empty_command_handler(_: EmptyCommandHandler)``,
|
|
|
|
|
протокол ``EmptyCommandHandler`` соответствует ``Callable[[], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_empty_command_handler(_: EmptyCommandHandler)``,
|
|
|
|
|
протокол ``EmptyCommandHandler`` соответствует ``Callable[[], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
к примеру функция или лямбда, которая не принимает аргументов и ничего не возвращает.
|
|
|
|
|
|
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода пустой команды:
|
|
|
|
|
|
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample4.py
|
|
|
|
|
:language: python
|
|
|
|
|
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
``Поведение обработки неизвестной команды``: Введена неизвестная команда
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
Поведение триггерится, когда пользователь вводит команду, которая не зарегистрирована ни в одном роутере и не является алиасом ни для
|
|
|
|
|
Поведение триггерится, когда пользователь вводит команду, которая не зарегистрирована ни в одном роутере и не является алиасом ни для
|
|
|
|
|
одной зарегистрированной команды.
|
|
|
|
|
|
|
|
|
|
Дефолтный хэндлер выводит в консоль
|
|
|
|
@@ -104,18 +109,18 @@
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
Unknown command: <trigger of the input command>
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_unknown_command_handler(_: NonStandardBehaviorHandler[InputCommand])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[InputCommand]`` соответствует ``Callable[[InputCommand], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
``Поведение выхода из приложения``: Введена команда выхода
|
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
@@ -126,13 +131,12 @@
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
|
|
See you
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_exit_command_handler(_: NonStandardBehaviorHandler[Response])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[Response]`` соответствует ``Callable[[Response], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
к примеру функция или лямбда, которая принимает обязательный аргумент типа :ref:`Response <response>` и ничего не возвращает.
|
|
|
|
|
|
|
|
|
|
Для переопределения стандартного поведения используется сеттер ``.set_exit_command_handler(_: NonStandardBehaviorHandler[Response])``,
|
|
|
|
|
протокол ``NonStandardBehaviorHandler[Response]`` соответствует ``Callable[[Response], None]``, то есть хэндлер должен быть вызываемым объектом,
|
|
|
|
|
к примеру функция или лямбда, которая принимает обязательный аргумент типа :ref:`Response <root_api_response>` и ничего не возвращает.
|
|
|
|
|
|
|
|
|
|
Сэмпл кода, переопределяющего хэндлер ввода команды выхода:
|
|
|
|
|
|
|
|
|
|
.. literalinclude:: ../code_snippets/error_handling_example_sample6.py
|
|
|
|
|
:language: python
|
|
|
|
|
|