Даже самые опытные разработчики редко пишут правильный код с первой попытки, поэтому устранение неполадок становится важной частью процесса разработки. В этом разделе мы рассмотрим несколько методов, которые помогут вам находить, понимать и отлаживать ошибки в скриптах.
Сообщения об ошибках
При возникновении ошибки в скрипте отображается сообщение об ошибке. Сообщение сопровождается номером строки, используемым для устранения неполадок. Существует два основных типа ошибок, отображаемых таким образом: синтаксические ошибки и ошибки времени выполнения .
Синтаксические ошибки
Синтаксические ошибки возникают из-за написания кода, не соответствующего грамматике 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)
Такие ошибки обычно легко устранить, поскольку они обнаруживаются сразу и, как правило, имеют простые причины. Файл с синтаксическими ошибками сохранить невозможно, поэтому в проект будет добавлен только корректный код.
Ошибки времени выполнения
Эти ошибки вызваны неправильным использованием функции или класса и могут быть обнаружены только после запуска скрипта. Например, следующий код вызывает ошибку времени выполнения:
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);
}
Код отформатирован правильно, но при вызове MailApp.sendEmail
мы передаём значение "john" в качестве адреса электронной почты. Поскольку это недопустимый адрес электронной почты, при запуске скрипта возникает следующая ошибка:
Неверный адрес электронной почты: john (строка 5)
Устранение этих ошибок усложняется тем, что данные, передаваемые в функцию, часто не прописаны в коде, а извлекаются из электронной таблицы, формы или другого внешнего источника данных. Использование описанных ниже методов отладки поможет вам определить причину этих ошибок.
Распространенные ошибки
Ниже приведен список распространенных ошибок и их причин.
Служба вызвана слишком много раз: <имя действия>
Эта ошибка означает, что вы превысили дневную квоту для определённого действия. Например, эта ошибка может возникнуть, если вы отправляете слишком много писем за один день. Квоты устанавливаются на разных уровнях для учётных записей уровня «Обычный», «Домен» и «Премиум» и могут быть изменены в любое время без предварительного уведомления Google. С ограничениями квот для различных действий можно ознакомиться в документации по квотам Apps Script .
Сервер недоступен или произошла ошибка сервера, повторите попытку.
Вот несколько возможных причин этих ошибок:
- Сервер или система Google временно недоступна. Подождите несколько минут и попробуйте запустить скрипт ещё раз.
- В вашем скрипте есть ошибка, для которой нет соответствующего сообщения об ошибке. Попробуйте отладить скрипт и посмотрите, сможете ли вы локализовать проблему.
- В скрипте Google Apps есть ошибка, вызывающая эту ошибку. Инструкции по поиску и отправке отчётов об ошибках см. в разделе «Ошибки» . Прежде чем сообщать о новой ошибке, проверьте, не сообщали ли о ней другие пользователи.
Для выполнения этого действия требуется разрешение.
Эта ошибка указывает на то, что у скрипта отсутствует необходимая авторизация для запуска. При запуске скрипта в редакторе скриптов или из пользовательского пункта меню пользователю отображается диалоговое окно авторизации. Однако при запуске скрипта из триггера, встроенного в страницу Google Сайтов или запущенного как служба, диалоговое окно не отображается, и возникает эта ошибка.
Чтобы авторизовать скрипт, откройте редактор скриптов и запустите любую функцию. Появится запрос на авторизацию, чтобы вы могли авторизовать проект скрипта. Если скрипт содержит новые неавторизованные службы, необходимо повторно авторизовать его.
Эта ошибка часто возникает из-за триггеров , которые либо срабатывают до того, как пользователь их авторизовал, либо срок их авторизации истек . Если у вас нет доступа к проекту скрипта (например, ошибка возникает в используемом вами дополнении ), обычно можно авторизовать скрипт, повторно используя это дополнение. Если триггер продолжает срабатывать и вызывать эту ошибку, вы можете удалить свои триггеры, выполнив следующие действия:
- В левой части проекта Apps Script нажмите Triggers .
- Справа от триггера, который вы хотите удалить, нажмите Дополнительно > Удалить триггер .
Вы также можете удалить проблемные триггеры дополнений, удалив само дополнение .
Детализированные разрешения также могут вызывать эти ошибки. Apps Script автоматически запрашивает недостающие разрешения у пользователя, если только выполнение не инициируется триггером. Чтобы защитить выполнение триггера от этой ошибки, см. страницу с областями авторизации.
Доступ запрещен: DriveApp или политика домена отключила сторонние приложения Drive
Администраторы Google Workspace Владельцы доменов могут отключить API Диска для своего домена, что запрещает пользователям устанавливать и использовать приложения Google Диска. Этот параметр также запрещает пользователям использовать дополнения Apps Script, использующие сервис Диска или Advanced Drive Service (даже если скрипт был авторизован до отключения API Диска администратором).
Однако если надстройка или веб-приложение, использующее службу Drive, опубликованы для установки на уровне домена и установлены администратором для некоторых или всех пользователей в домене, скрипт будет работать для этих пользователей, даже если API Drive отключен в домене.
У скрипта нет разрешения на получение идентификационных данных активного пользователя.
Указывает, что идентификационные данные и адрес электронной почты активного пользователя недоступны скрипту. Это предупреждение возникает при вызове Session.getActiveUser()
. Оно также может возникать при вызове Session.getEffectiveUser()
, если скрипт работает в режиме авторизации, отличном от AuthMode.FULL
. Если получено это предупреждение, последующие вызовы User.getEmail()
возвращают только "".
Существует несколько способов устранения этого предупреждения в зависимости от режима авторизации, в котором выполняется скрипт. Режим авторизации указывается в вызываемых функциях как свойство authMode
параметра события e
.
- В
AuthMode.FULL
рассмотрите возможность использованияSession.getEffectiveUser()
. - В
AuthMode.LIMITED
убедитесь, что владелец авторизовал скрипт. - В других режимах авторизации избегайте вызова любого из методов.
- Если вы Google Workspace Если клиент впервые столкнулся с этим предупреждением из-за устанавливаемого триггера , убедитесь, что триггер запущен от имени пользователя вашей организации.
Библиотека отсутствует
При добавлении популярной библиотеки в скрипт может возникнуть сообщение об её отсутствии, даже если библиотека указана в списке зависимостей скрипта. Возможно, к библиотеке одновременно обращается слишком много пользователей. Чтобы избежать этой ошибки, попробуйте одно из следующих решений:
- Скопируйте и вставьте код библиотеки в свой скрипт и удалите зависимость библиотеки.
- Скопируйте скрипт библиотеки и разверните его как библиотеку из своей учётной записи. Обязательно обновите зависимость в исходном скрипте на новую библиотеку вместо общедоступной.
Произошла ошибка из-за отсутствия версии библиотеки или версии развертывания. Код ошибки: Not_Found.
Это сообщение об ошибке указывает на одну из следующих причин:
- Развёрнутая версия скрипта была удалена. Чтобы обновить развёрнутую версию скрипта, см. раздел Редактирование версионированного развёртывания .
- Версия библиотеки, используемой скриптом , была удалена. Чтобы узнать, какая библиотека отсутствует, нажмите . Отсутствующая библиотека выдаёт сообщение об ошибке. После того, как вы найдёте библиотеку, которую необходимо обновить, выполните одно из следующих действий:
- Обновите библиотеку, чтобы использовать другую версию. См. раздел Обновление библиотеки .
- Удалите удалённую библиотеку из проекта скрипта и кода. См. раздел Удаление библиотеки .
рядом с её названием - Скрипт библиотеки, которую использует ваш скрипт, включает другую библиотеку, использующую удалённую версию. Выполните одно из следующих действий:
- Если у вас есть права на редактирование библиотеки, которую использует ваш скрипт, обновите вторичную библиотеку в этом скрипте до существующей версии.
- Обновите библиотеку, чтобы использовать другую версию. См. раздел Обновление библиотеки .
- Удалите библиотеку из вашего проекта скрипта и кода. См. раздел Удаление библиотеки .
Ошибка 400: invalid_scope при вызове Google Chat API с расширенным сервисом
Если вы столкнулись Error 400: invalid_scope
и сообщением « Some requested scopes cannot be shown
, это означает, что вы не указали области авторизации в файле appsscript.json
проекта Apps Script. В большинстве случаев Apps Script автоматически определяет необходимые скрипту области, но при использовании расширенного сервиса Chat необходимо вручную добавить области авторизации, используемые вашим скриптом, в файл манифеста проекта Apps Script. См. раздел Настройка явных областей .
Чтобы устранить ошибку, добавьте соответствующие области авторизации в файл appsscript.json
проекта Apps Script в массив oauthScopes
. Например, для вызова метода spaces.messages.create
добавьте следующее:
"oauthScopes": [
"https://www.googleapis.com/auth/chat.messages.create"
]
Вызовы UrlFetch к <URL> запрещены вашим администратором.
Администраторы Google Workspace могут включить белый список в консоли администратора, чтобы контролировать, к каким внешним доменам можно получить доступ через Apps Script.
Чтобы устранить ошибку, обратитесь к администратору, чтобы он добавил URL-адрес в белый список.
Отладка
Не все ошибки приводят к появлению сообщения об ошибке. Возможны более неявные ошибки, когда код технически корректен и может быть выполнен, но результаты не соответствуют ожидаемым. Вот несколько стратегий для решения таких ситуаций и дальнейшего изучения скрипта, который работает не так, как ожидается.
Ведение журнала
Во время отладки часто бывает полезно записывать информацию о ходе выполнения скрипта. В Google Apps Script есть два метода регистрации информации: служба ведения журналов Cloud и более простые службы Logger и Console , встроенные в редактор Apps Script.
Более подробную информацию см. в руководстве по ведению журнала .
Сообщение об ошибках
Исключения, возникающие из-за ошибок выполнения, автоматически регистрируются с помощью сервиса отчётности об ошибках Google Cloud. Этот сервис позволяет искать и фильтровать сообщения об исключениях, создаваемые вашим проектом скрипта.
Чтобы получить доступ к отчетам об ошибках, см. раздел Просмотр журналов облака и отчетов об ошибках в консоли Google Cloud Platform .
Казни
При каждом запуске скрипта Apps Script записывает его выполнение, включая облачные журналы. Эти записи помогут вам понять, какие действия выполнил ваш скрипт.
Чтобы просмотреть выполнения вашего скрипта в проекте Apps Script, слева нажмите Executions
.Проверка статуса службы Apps Script
Хотя это случается редко, иногда возникают временные проблемы с некоторыми сервисами Google Workspace (например, Gmail или Диск), которые могут привести к сбоям в работе сервисов. В таких случаях проекты Apps Script, взаимодействующие с этими сервисами, могут работать некорректно.
Вы можете проверить наличие сбоя в работе сервиса Google Workspace, просмотрев панель состояния Google Workspace . Если сбой происходит в данный момент, дождитесь его устранения или обратитесь за помощью в Справочный центр Google Workspace или к документации по известным проблемам Google Workspace .
Используйте отладчик и точки останова
Чтобы выявить проблемы в скрипте, запустите его в режиме отладки. В этом режиме выполнение скрипта приостанавливается при достижении точки останова — выделенной вами строки, которая, по вашему мнению, может содержать ошибку. При остановке скрипт отображает значение каждой переменной в этот момент времени, что позволяет вам исследовать внутреннюю работу скрипта без необходимости добавлять множество операторов журналирования.
Добавить точку останова
Чтобы добавить точку останова, наведите указатель мыши на номер строки, в которую хотите добавить точку останова. Щёлкните по кружку слева от номера строки. На изображении ниже показан пример точки останова, добавленной в скрипт:
Запустить скрипт в режиме отладки
Чтобы запустить скрипт в режиме отладки, в верхней части редактора нажмите кнопку Отладка .
Перед выполнением строки с точкой останова скрипт приостанавливается и отображает таблицу отладочной информации. Эту таблицу можно использовать для проверки данных, таких как значения параметров и информация, хранящаяся в объектах.
Для управления выполнением скрипта используйте кнопки «Вход», «Обход» и «Выход» в верхней части панели отладчика. Они позволяют запускать скрипт построчно и отслеживать изменение значений с течением времени.
Ошибка : исходный код для текущей строки недоступен.
Эта ошибка возникает, когда активный отладочный файл недоступен. Google Apps Script не поддерживает отображение динамически сгенерированных скриптов JavaScript (JS) в редакторе скриптов, например, сгенерированных с помощью eval()
и new Function()
. Эти скрипты создаются и выполняются в движке V8, но не отображаются в редакторе как отдельные файлы. При выполнении этих скриптов вы столкнётесь с этой ошибкой.
Например, рассмотрим следующий код:
function myFunction() {
eval('a=2');
}
При вызове eval()
его аргумент обрабатывается как JS-код и выполняется как динамически создаваемый скрипт внутри движка V8. При выполнении шага в eval()
возникает эта ошибка. Если скрипт содержит комментарий //# sourceURL
, его имя отображается в стеке вызовов. В противном случае он отображается как безымянная запись.
Несмотря на сообщение об ошибке, сеанс отладки остаётся активным, и выполнение может быть продолжено. Чтобы продолжить, выполните шаг входа, шаг выхода или возобновите выполнение. Однако эта ошибка продолжает появляться, пока выполнение остаётся в области действия динамического скрипта. После выхода выполнения за пределы динамического скрипта отладка продолжается без этой ошибки.
Проблемы с несколькими аккаунтами Google
Если вы одновременно вошли в несколько учётных записей Google, у вас могут возникнуть проблемы с доступом к надстройкам и веб-приложениям. Многопользовательский вход, то есть одновременный вход в несколько учётных записей Google, не поддерживается в Apps Script, надстройках и веб-приложениях.
Если вы откроете редактор Apps Script, будучи авторизованным более чем в одной учетной записи, Google предложит вам выбрать учетную запись, с которой вы хотите продолжить.
Если вы открываете веб-приложение или дополнение и сталкиваетесь с проблемами множественного входа, попробуйте одно из следующих решений:
- Выйдите из всех своих учетных записей Google и войдите только в ту, в которой установлено дополнение или веб-приложение, к которому вы хотите получить доступ.
- Откройте окно в режиме инкогнито в Google Chrome или аналогичное окно в режиме приватного просмотра и войдите в учетную запись Google, в которой находится надстройка или веб-приложение, к которому вы хотите получить доступ.
Получение помощи
Устранение неполадок с помощью перечисленных выше инструментов и методов может решить множество проблем, но могут возникнуть проблемы, требующие дополнительной помощи. Информация о том, где можно задать вопросы и сообщить об ошибках, доступна на нашей странице поддержки .