Обработка ошибок¶
Argenta выбрасывает исключения в пограничных случаях, связанных с пользовательским вводом.
По умолчанию они обрабатываются системными обработчиками, но вы можете их переопределить. Это делается с помощью сеттеров экземпляра App вида .set_*_handler(). Подробнее о каждом из них рассказано ниже.
Примечание
Ни одно исключение не остаётся необработанным, так как для каждого случая предусмотрен стандартный обработчик. Поэтому переопределение является опциональным.
Пример использования:
1from argenta import App
2
3def empty_command_handler():
4 print("Empty command handler called")
5
6app: App = App()
7app.set_empty_command_handler(empty_command_handler)
Возможные исключения и нестандартное поведение¶
UnprocessedInputFlagException: Некорректный синтаксис флагов¶
Это исключение выбрасывается, когда парсер не может обработать команду из-за некорректного синтаксиса. Чаще всего это связано с ошибкой в синтаксисе флагов. Подробнее о них можно прочитать в разделе Flags.
Стандартный обработчик выводит в консоль:
Incorrect flag syntax: <raw input command>
Для переопределения используется сеттер .set_incorrect_input_syntax_handler(). Он принимает на вход обработчик с сигнатурой Callable[[str], None], где единственный аргумент — это строка с необработанной командой.
Пример использования:
1from argenta import App
2
3def incorrect_input_syntax_handler(raw_command: str):
4 print(f"Incorrect input syntax for command: {raw_command}")
5
6app: App = App()
7app.set_incorrect_input_syntax_handler(incorrect_input_syntax_handler)
RepeatedInputFlagsException: Повторяющиеся флаги в команде¶
Исключение выбрасывается, если пользователь ввёл команду с повторяющимися флагами. Два флага (InputFlag) считаются одинаковыми, если у них совпадают имена. Подробнее о флагах и их синтаксисе — в разделе Flags.
Примечание
Сравнение на равенство у регистрируемых флагов (Flag) происходит иначе, подробнее в Flag.
Стандартный обработчик выводит в консоль:
Repeated input flags: <raw input command>
Для переопределения используется сеттер .set_repeated_input_flags_handler(). Он принимает на вход обработчик с сигнатурой Callable[[str], None], где единственный аргумент — это строка с необработанной командой.
Пример использования:
1from argenta import App
2
3def repeated_input_flags_handler(raw_command: str):
4 print(f"Repeated input flags: {raw_command}")
5
6app: App = App()
7app.set_repeated_input_flags_handler(repeated_input_flags_handler)
EmptyInputCommandException: Введена пустая команда¶
Исключение выбрасывается, если пользователь ввёл пустую строку или строку, состоящую только из пробельных символов (\n, \t, пробел и т.д.).
Стандартный обработчик выводит в консоль:
Empty input command
Для переопределения используется сеттер .set_empty_command_handler(). Он принимает на вход обработчик с сигнатурой Callable[[], None] (без аргументов).
Пример использования:
1from argenta import App
2
3def empty_command_handler():
4 print("Empty input command")
5
6app: App = App()
7app.set_empty_command_handler(empty_command_handler)
Обработка неизвестной команды¶
Это поведение активируется, когда пользователь вводит команду, которая не зарегистрирована ни в одном из роутеров и не является псевдонимом (alias) для существующей команды.
Стандартный обработчик выводит в консоль:
Unknown command: <trigger of the input command>
Для переопределения используется сеттер .set_unknown_command_handler(). Он принимает на вход обработчик с сигнатурой Callable[[InputCommand], None], где аргумент — объект InputCommand.
Пример использования:
1from argenta import App
2from argenta.command import InputCommand
3
4def unknown_command_handler(command: InputCommand):
5 print(f"Unknown input command with trigger: {command.trigger}")
6
7app: App = App()
8app.set_unknown_command_handler(unknown_command_handler)
Выход из приложения¶
Это поведение активируется, когда пользователь вводит команду, помеченную как команда выхода.
Стандартный обработчик выводит в консоль текст и завершает работу приложения:
See you
Для переопределения используется сеттер .set_exit_command_handler(). Он принимает на вход обработчик с сигнатурой Callable[[Response], None], где аргумент — объект Response.
Пример использования:
1from argenta import App, Response
2
3def exit_command_handler(response: Response):
4 print("Exit command handler")
5
6app: App = App()
7app.set_exit_command_handler(exit_command_handler)