Введение
При разработке алгоритма разработчику зачастую приходится предусматривать поведение программы в различных сценариях и продумывать шаги по обработке возможных ошибок при работе бота. К примеру, если бот должен работать с файлами на компьютере, то может возникнуть ситуация, когда необходимый файл или папка отсутствуют (были перемещены или удалены). Такой сценарий (конечно, в зависимости от бизнес-процесса) обычно можно предусмотреть и довольно легко обработать, например, добавлением действия по проверке наличия файла перед действием, работающим непосредственно с этим файлом.
Однако могут возникать и исключительные ситуации, которые не всегда можно предусмотреть. Например, при работе с интерфейсом приложения или браузера может случиться так, что какой-то элемент (кнопка или картинка) не прогрузится вовремя или вовсе не появится. И когда алгоритм дойдет до шага работы с этим действием, возникнет исключение, поскольку бот не сможет найти элемент в заданное время. Существует несколько способов обработки таких исключений, ниже мы расскажем о них подробнее.
Механизм обработки
В каждом блоке действия существует порт «Ошибка» или, как его еще называют, «красный порт». Это порт, к которому можно привязать набор действий, выполняемый в случае возникновения ошибки на этапе выполнения основного заданного действия.
Рассмотрим простейший пример обработки ошибки при выполнении алгоритма.
Предположим, что наш бот должен прочитать текст из какого-то файла. Для этого мы используем действие Прочитать текст из файла, но намеренно перед запуском бота мы переместим сам файл, чтобы бот не смог его найти.
В течение какого-то времени бот попытается найти нужный файл, но в конце концов остановится, а в консоли появится сообщение об ошибке:
Теперь рассмотрим непосредственно процесс обработки исключения. Построим алгоритм так, чтобы бот выводил причину ошибки в окно уведомления пользователя.
- Зададим путь к файлу в действии Прочитать текст из файла. Путь к файлу будет таким:
C:\Users\{{Имя пользователя}}\Desktop\Какой-то файл.txt
- Перенесем этот файл в какую-то папку, чтобы изменился путь к файлу, но не будем менять параметр «Путь к файлу» в параметрах действия.
- Добавим действие Задать значение переменной через красный порт. В качестве имени переменной можно задать любое значение, например, укажем имя «exception». В параметре «Значение переменной» выберем опцию «Сохранить результат предыдущего шага».
- Следующим действием в алгоритме выберем действие «Уведомление пользователя»: в его параметре «Сообщение пользователю» выберем опцию «Сохранить результат предыдущего шага». В качестве «Имени кнопки» можно задать любое значение.
Запустим алгоритм. Бот попытается найти файл, но при неудаче покажет пользователю сообщение, что по заданному пути такого файла нет.
В реальности подобный сценарий можно очень легко предугадать и обработать (проверить наличие файла вручную). На этом примере мы хотим продемонстрировать подход, который мог бы использоваться в таком сценарии при невозможности выполнения ручной проверки перед запуском бота. Так вы можете на простейшем примере увидеть принцип обработки исключений.
Советы и приемы при обработке исключений
При обработке исключений рекомендуется придерживаться следующих советов и
приемов:
- Стараться предугадывать возможное поведение робота и, где имеет смысл,
обрабатывать каждый сценарий явно. - При использовании порта «Ошибка» часто полезно сохранять в переменную
сообщение об ошибке и выводить его в лог или в сообщение пользователю. Для бизнес-пользователя можно предусмотреть более понятное сообщение об ошибке. - В некоторых ситуациях имеет смысл выделить часть алгоритма в подпрограмму, внутри которой не осуществлять обработку исключений. Для обработки исключений лучше воспользоваться портом «Ошибка» из блока подпрограммы.
- Хорошей практикой в некоторых случаях является отлавливание исключения и возвращения алгоритма на исходную позицию для повторного прохода. Например, если алгоритм подразумевает перенос данных из набора документов в программу, то хорошим решением при возникновении исключения на какой-либо из итерации будет закрытие программы (или принудительное завершение) и возврат к начальному состоянию алгоритма, чтобы повторно обработать этот документ или перейти к следующему.
- Если ваш алгоритм работает с интерфейсом сайта или какого-то приложения, то полезным будет добавить действие Сделать скриншот через красный порт. Таким образом, при возникновении исключения, вы сможете не только увидеть сообщение об ошибке в консоли, но и снимок экрана в момент возникновения ошибки, что позволит детальнее разобраться в причинах и обработать исключение.