Устранение неполадок

Даже самый опытный разработчик редко пишет правильный код с первого раза, поэтому устранение неполадок является важной частью процесса разработки. В этом разделе рассматриваются методы поиска, понимания и отладки ошибок в ваших скриптах.

Сообщения об ошибках

Когда в вашем скрипте возникает ошибка, появляется сообщение об ошибке с номером строки. Существует два основных типа ошибок: синтаксические ошибки и ошибки времени выполнения .

Синтаксические ошибки

Синтаксические ошибки возникают, когда код не соответствует грамматике JavaScript, и обнаруживаются при сохранении скрипта. Например, следующий фрагмент содержит синтаксическую ошибку:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

Проблема заключается в отсутствии символа " ) в конце строки 4. При сохранении скрипта появляется следующая ошибка:

Отсутствует ) после списка аргументов. (строка 4)

Эти ошибки обнаруживаются мгновенно, что упрощает их устранение. В ваш проект сохраняется только корректный код.

Ошибки во время выполнения

Ошибки времени выполнения возникают при неправильном использовании функции или класса и обнаруживаются во время выполнения скрипта. Например, следующий код вызывает ошибку времени выполнения:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

Хотя код отформатирован правильно, "john" — недействительный адрес электронной почты. В результате возникает следующая ошибка:

Неверный адрес электронной почты: john (строка 5)

Эти ошибки представляют собой сложную задачу, поскольку данные часто извлекаются из внешних источников, таких как электронные таблицы или формы. Используйте методы отладки, чтобы определить причину.

Распространенные ошибки

Ниже приведён список распространённых ошибок и их причин.

Сервис был вызван слишком много раз: <название действия>

Эта ошибка указывает на то, что вы превысили свою суточную квоту на какое-либо действие, например, на отправку слишком большого количества электронных писем. Квоты различаются в зависимости от типа учетной записи и могут изменяться. См. ограничения в документации по квотам Apps Script .

Сервер недоступен. Или произошла ошибка сервера, пожалуйста, попробуйте позже.

Возможные причины включают:

  • Сервер Google временно недоступен. Подождите и попробуйте снова.
  • Ошибка в вашем скрипте не сопровождается соответствующим сообщением. Попробуйте выполнить отладку, чтобы выявить проблему.
  • В Google Apps Script обнаружена ошибка. Найдите и отправьте отчет об ошибке в разделе «Ошибки» .

Для выполнения этого действия требуется разрешение.

Скрипту не хватает необходимых прав для запуска. При запуске скрипта из триггера или в качестве службы диалоговое окно авторизации не может быть отображено.

Для авторизации скрипта откройте редактор скриптов и запустите любую функцию. Если скрипт использует новые неавторизованные сервисы, его необходимо авторизовать заново.

Эта ошибка часто возникает из-за триггеров, срабатывающих до авторизации или после истечения срока её действия. Если причиной является дополнение, используйте его повторно для повторной авторизации. Удалите проблемные триггеры:

  1. В проекте Apps Script нажмите «Запускает .
  2. Рядом с триггером нажмите More > Удалить триггер .

В качестве альтернативы, удалите дополнение .

Детальная настройка прав доступа также может вызывать эти ошибки. Для защиты выполнения триггеров см. страницу « Области авторизации» .

Доступ запрещен: DriveApp или политика домена отключила сторонние приложения для Google Диска.

Администраторы Google Workspace могут отключить API Google Drive для своего домена, что не позволит пользователям использовать приложения Google Drive или надстройки Apps Script, использующие сервис Google Drive .

Если надстройка или веб-приложение опубликованы для установки в масштабах всего домена и установлены администратором, скрипт будет работать даже при отключенном API Google Диска.

Скрипт не имеет разрешения на получение идентификационных данных активного пользователя.

Идентификационные данные и адрес электронной почты активного пользователя недоступны. Это происходит из-за вызовов методов Session.getActiveUser() или Session.getEffectiveUser() в режимах авторизации, отличных от AuthMode.FULL . Если ваш скрипт запускается по триггеру, вы можете найти режим авторизации в свойстве authMode объекта события Apps Script .

Для устранения этой неполадки используйте режим авторизации:

  • В AuthMode.FULL рекомендуется использовать Session.getEffectiveUser() .
  • В AuthMode.LIMITED убедитесь, что владелец авторизовал скрипт.
  • В других режимах авторизации избегайте вызова любого из этих методов.
  • Если вы являетесь клиентом Google Workspace и недавно столкнулись с этим предупреждением от устанавливаемого триггера , убедитесь, что триггер запущен от имени пользователя в вашей организации.

Библиотека отсутствует

Библиотека может быть объявлена ​​пропавшей, если к ней одновременно обращается слишком много людей. Для решения этой проблемы:

  • Скопируйте код библиотеки непосредственно в свой скрипт.
  • Скопируйте и разверните библиотеку из своей учетной записи.
  • Если библиотека не требуется для работы вашего скрипта, удалите её из проекта скрипта.

Произошла ошибка из-за отсутствия версии библиотеки или версии развертывания. Код ошибки Not_Found.

Данное сообщение об ошибке указывает на одну из следующих причин:

  • Версия скрипта, использованная при развертывании, была удалена. Для решения этой проблемы отредактируйте развертывание и выберите другую версию скрипта.
  • Была удалена версия библиотеки, используемая скриптом. Чтобы решить эту проблему, в редакторе скриптов в разделе «Библиотеки» найдите библиотеку и обновите её до другой версии или удалите библиотеку. Для обновления щелкните номер версии и выберите другую версию. Для удаления нажмите > «Удалить» .
  • Библиотека включает в себя другую библиотеку, и версия этой библиотеки была удалена. Для решения этой проблемы свяжитесь с автором библиотеки или используйте другую версию библиотеки, которая используется в вашем скрипте.

Ошибка 400: invalid_scope при вызове API Google Chat с использованием расширенного сервиса.

Если вы столкнулись с Error 400: invalid_scope с сообщением " Some requested scopes cannot be shown , это означает, что вы не указали области авторизации в файле appsscript.json проекта Apps Script. В большинстве случаев Apps Script автоматически определяет, какие области действия необходимы скрипту, но при использовании расширенной службы чата вам необходимо вручную добавить области авторизации, используемые вашим скриптом, в файл манифеста проекта Apps Script. См. раздел " Настройка явных областей действия" .

Для устранения ошибки добавьте соответствующие области авторизации в файл appsscript.json проекта Apps Script в составе массива oauthScopes . Например, для вызова метода spaces.messages.create добавьте следующее:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

Администрирование не разрешает вызовы функции UrlFetch к <URL>.

Администраторы Google Workspace могут использовать список разрешенных доменов для контроля доступа к внешним доменам. Обратитесь к администратору, чтобы добавить URL-адрес в этот список.

Отладка

Некоторые ошибки незаметны и не вызывают сообщений об ошибках. Например, ваш код может выполняться, но результаты могут быть неожиданными. Используйте следующие стратегии для исследования скриптов, которые ведут себя непредсказуемо.

Ведение журнала

Записывайте информацию по мере выполнения скрипта, используя службу облачного логирования или службы логирования и консоли в редакторе скриптов.

Сообщение об ошибках

Для использования функции отчетов об ошибках в Google Cloud используйте стандартный проект, управляемый пользователем, вместо проекта по умолчанию.

При использовании стандартного проекта ошибки во время выполнения автоматически записываются в отчеты об ошибках Google Cloud. Просмотр журналов Cloud и отчетов об ошибках осуществляется в консоли Google Cloud .

Казни

Google Apps Script записывает каждое выполнение, включая журналы Cloud. Чтобы просмотреть выполненные скрипты, нажмите « Выполнения .

Проверка состояния сервиса

Проверьте наличие сбоев в работе сервиса Google Workspace на панели состояния Google Workspace .

Используйте отладчик и точки останова.

Чтобы обнаружить проблемы в вашем скрипте, вы можете запустить его в режиме отладки. В режиме отладки скрипт приостанавливается при достижении точки останова, которая представляет собой выделенную вами строку в скрипте, которая, по вашему мнению, может содержать проблему. Когда скрипт приостанавливается, он отображает значение каждой переменной в этот момент времени, что позволяет вам изучить внутреннюю работу скрипта без необходимости добавлять множество операторов логирования.

Добавить точку останова

Чтобы добавить точку останова, наведите курсор на номер строки, к которой вы хотите добавить точку останова. Слева от номера строки щелкните кружок. На изображении ниже показан пример точки останова, добавленной в скрипт:

Добавить точку останова

Запуск скрипта в режиме отладки

Чтобы запустить скрипт в режиме отладки, в верхней части редактора нажмите кнопку «Отладка» .

Перед выполнением строки с точкой останова скрипт приостанавливается и отображает таблицу отладочной информации. Вы можете использовать эту таблицу для проверки таких данных, как значения параметров и информация, хранящаяся в объектах.

Для управления запуском скрипта используйте кнопки «Шаг вперед», «Шаг назад» и «Шаг назад» в верхней части панели отладчика. Они позволяют запускать скрипт построчно и отслеживать изменение значений с течением времени.

Ошибка : Исходный код для текущей строки недоступен.

Исходный код для текущей строки недоступен.

Эта ошибка появляется, когда отсутствует активный файл отладки. Google Apps Script не поддерживает отображение динамически генерируемых скриптов JavaScript (JS) в редакторе скриптов, например, тех, которые создаются с помощью eval() и new Function() . Эти скрипты создаются и выполняются в движке V8, но не представлены в редакторе как отдельные файлы. Если вы пошагово выполните эти скрипты, вы столкнетесь с этой ошибкой.

Например, рассмотрим следующий код:

function myFunction() {
  eval('a=2');
}

При вызове функции eval() её аргумент рассматривается как код JavaScript и выполняется как динамически создаваемый скрипт внутри движка V8. Если вы пошагово выполните вызов eval() , появится эта ошибка. Если скрипт содержит комментарий //# sourceURL , его имя отображается в стеке вызовов. В противном случае он отображается как безымянная запись.

Несмотря на сообщение об ошибке, сеанс отладки остается активным, и выполнение может продолжаться. Для продолжения пошагово вставьте или выйдите из программы, или возобновите выполнение. Однако эта ошибка продолжает появляться до тех пор, пока выполнение остается в рамках динамического скрипта. После выхода выполнения за пределы динамического скрипта отладка продолжается без этой ошибки.

Проблемы с несколькими учетными записями Google.

Если вы одновременно вошли в несколько учетных записей Google, у вас могут возникнуть проблемы с доступом к дополнениям и веб-приложениям. Многопользовательский вход, или одновременный вход в несколько учетных записей Google, не поддерживается для Apps Script, дополнений и веб-приложений.

  • Если вы откроете редактор Apps Script, войдя в систему под несколькими учетными записями, Google предложит вам выбрать ту учетную запись, с которой вы хотите продолжить.

  • Если при открытии веб-приложения или дополнения возникают проблемы с одновременным входом в систему нескольких пользователей, попробуйте одно из следующих решений:

    • Выйдите из всех своих учетных записей Google и войдите только в ту, которая содержит дополнение или веб-приложение, к которому вы хотите получить доступ.
    • Откройте окно в режиме инкогнито в Google Chrome или аналогичное окно приватного просмотра и войдите в учетную запись Google, к которой привязано дополнение или веб-приложение, к которому вы хотите получить доступ.

Получение помощи

Посетите нашу страницу поддержки , чтобы задать вопросы или сообщить об ошибках.