Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Functions
  • Сопоставление с другими сервисами Yandex Cloud
    • Обзор
    • Управление зависимостями
    • Обработчик запросов
    • Контекст вызова
    • Журналирование
    • Обработка ошибок
    • Использование SDK
  • Инструменты
  • Правила тарификации
  • Управление доступом
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы
  1. Разработка на Kotlin
  2. Обработка ошибок

Обработка ошибок функции на Kotlin

Статья создана
Yandex Cloud
Обновлена 3 октября 2024 г.

Если обработчик сигнализирует об ошибке исполнения или загрузки функции, среда выполнения автоматически перехватывает ошибку и возвращает в ответ JSON-документ, содержащий информацию о типе ошибки. Формат этого JSON-документа описан в разделе Вызов функции. Информация об ошибке записывается в журнал выполнения.

Примеры обработки ошибокПримеры обработки ошибок

Допустим, обработчик возвращает сумму чисел. Если он принимает пустой запрос, это приводит к выбрасыванию IllegalArgumentException.

Код функции:

fun handle(request: IntArray): Int {
    if (request.isEmpty()) throw IllegalArgumentException()
    return request.sum()
}

Ситуация 1. При вызове функции пользователь передает массив чисел [1, 22, 333]:

curl \
     --header "Authorization: Bearer <IAM-тoкен>" \
     --data "[1, 22, 333]" \
     "https://functions.yandexcloud.net/<идентификатор_функции>?integration=raw"

В результате возвращается сумма чисел 356.

Ситуация 2. Пользователь передает пустой массив:

curl \
     --header "Authorization: Bearer <IAM-тoкен>" \
     --data "[]" \
     "https://functions.yandexcloud.net/<идентификатор_функции>?integration=raw"

Среда выполнения перехватывает исключение и формирует из него JSON-документ, содержащий сообщение об ошибке (поле errorMessage), тип ошибки (поле errorType) и трассировку стека (поле stackTrace).

Возвращаемый JSON-документ:

{
    "errorMessage": "An exception has occurred in the user code, details: java.lang.IllegalArgumentException. [ERR_USER_CODE]",
    "errorType": "IllegalArgumentException",
    "stackTrace": [
        {
            "function": "handle",
            "file": "Handler.kt",
            "line": 2
        },
            ...
    ]
}

Ситуация 3. Вместо чисел передается строка, что приводит к ошибке десериализации:

curl \
     --header "Authorization: Bearer <IAM-тoкен>" \
     --data "notanarray" \
     "https://functions.yandexcloud.net/<идентификатор_функции>?integration=raw"

Возвращаемый JSON-документ:

{
    "errorMessage": "An exception has occurred during request deserialization. Details: com.squareup.moshi.JsonEncodingException: Use JsonReader.setLenient(true) to accept malformed JSON at path $. [ERR_INVALID_REQUEST]",
    "errorType": "FunctionException"
}

Была ли статья полезна?

Предыдущая
Журналирование
Следующая
Использование SDK
Проект Яндекса
© 2025 ООО «Яндекс.Облако»