Даже самый опытный разработчик редко пишет код правильно с первой попытки, что делает устранение неполадок важной частью процесса разработки. В этом разделе мы рассмотрим некоторые приемы, которые могут помочь вам находить, понимать и устранять ошибки в сценариях.
Сообщения об ошибках
Когда ваш сценарий обнаруживает ошибку, отображается сообщение об ошибке. Сообщение сопровождается номером строки, используемой для устранения неполадок. Существует два основных типа ошибок, отображаемых таким образом: синтаксические ошибки и ошибки времени выполнения .
Синтаксические ошибки
Синтаксические ошибки вызваны написанием кода, который не соответствует грамматике 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);
}
Код отформатирован правильно, но мы передаем значение «john» для адреса электронной почты при вызове MailApp.sendEmail
. Поскольку это недействительный адрес электронной почты, при запуске скрипта выдается следующая ошибка:
Неверный адрес электронной почты: john (строка 5)
Что делает эти ошибки более сложными для устранения, так это то, что часто данные, которые вы передаете в функцию, не записываются в коде, а вместо этого извлекаются из электронной таблицы, формы или другого внешнего источника данных. Приведенные ниже методы отладки помогут определить причину этих ошибок.
Распространенные ошибки
Ниже приведен список распространенных ошибок и их причины.
Служба вызывалась слишком много раз: <имя действия>
Эта ошибка указывает на то, что вы превысили дневную квоту для данного действия. Например, вы можете столкнуться с этой ошибкой, если отправляете слишком много писем за один день. Квоты устанавливаются на разных уровнях для потребительских, доменных и основных учетных записей и могут быть изменены в любое время без предварительного объявления со стороны Google. Вы можете просмотреть лимиты квот для различных действий в документации по квотам Apps Script .
Сервер недоступен. или Произошла ошибка сервера, попробуйте еще раз.
Есть несколько возможных причин этих ошибок:
- Сервер или система Google временно недоступны. Подождите несколько секунд и попробуйте снова запустить скрипт.
- В вашем скрипте есть ошибка, для которой нет соответствующего сообщения об ошибке. Попробуйте отладить свой сценарий и посмотреть, сможете ли вы изолировать проблему.
- В скрипте Google Apps есть ошибка, которая вызывает эту ошибку. Инструкции по поиску и отправке отчетов об ошибках см. в разделе Ошибки . Прежде чем сообщать о новой ошибке, поищите, не сообщали ли о ней другие.
Для выполнения этого действия требуется авторизация.
Эта ошибка указывает на то, что скрипту не хватает авторизации, необходимой для запуска. Когда сценарий запускается в редакторе сценариев или из пользовательского пункта меню, пользователю отображается диалоговое окно авторизации. Однако, когда сценарий запускается из триггера, встроен в страницу Сайтов Google или запускается как служба, диалоговое окно не может быть представлено, и отображается эта ошибка.
Для авторизации скрипта откройте Редактор скриптов и запустите любую функцию. Появится приглашение авторизации, чтобы вы могли авторизовать проект скрипта. Если сценарий содержит новые неавторизованные службы, необходимо повторно авторизовать сценарий.
Эта ошибка часто возникает из-за того, что триггеры срабатывают до того, как пользователь авторизует их. Если у вас нет доступа к проекту сценария (например, из-за того, что ошибка возникает для надстройки, которую вы используете), вы обычно можете авторизовать сценарий, снова используя надстройку. Если триггер продолжает срабатывать и вызывает эту ошибку, вы можете удалить свои триггеры, выполнив следующие действия:
- Слева от проекта Apps Script щелкните Запускает .
- Справа от триггера, который нужно удалить, нажмите Еще > Удалить триггер .
Вы также можете удалить проблемные триггеры дополнений, удалив надстройку .
Доступ запрещен: DriveApp или Политика домена отключила сторонние приложения для Диска
Администраторы доменов Google Workspace могут отключить Drive SDK для своего домена, что не позволит их пользователям устанавливать и использовать приложения Google Диска. Этот параметр также запрещает пользователям использовать надстройки Apps Script, использующие службу Drive или Advanced Drive Service (даже если сценарий был авторизован до того, как администратор отключил Drive SDK).
Однако если надстройка или веб-приложение, использующее службу Диска, опубликовано для установки на уровне домена и установлено администратором для некоторых или всех пользователей в домене, сценарий будет работать для этих пользователей, даже если пакет SDK для Диска отключен в домен.
У сценария нет разрешения на получение идентификатора активного пользователя.
Указывает, что удостоверение и адрес электронной почты активного пользователя недоступны для сценария. Это предупреждение является результатом вызова Session.getActiveUser()
. Это также может быть результатом вызова Session.getEffectiveUser()
, если скрипт работает в режиме авторизации, отличном от AuthMode.FULL
. Если выдается это предупреждение, последующие вызовы User.getEmail()
возвращают только "".
Существует несколько способов устранения этого предупреждения, в зависимости от режима авторизации, в котором выполняется сценарий. Режим авторизации отображается в триггерных функциях как свойство authMode
параметра события e
.
- В
AuthMode.FULL
этого рассмотрите возможность использованияSession.getEffectiveUser()
. - В
AuthMode.LIMITED
убедитесь, что владелец авторизовал скрипт. - В других режимах авторизации избегайте вызова любого метода.
- Если вы являетесь клиентом Google Workspace , впервые получающим это предупреждение от устанавливаемого триггера , убедитесь, что триггер запущен от имени пользователя в вашей организации.
Библиотека отсутствует
Если вы добавите популярную библиотеку в свой сценарий, вы можете получить сообщение об ошибке, в котором говорится, что она отсутствует, даже если библиотека указана как зависимость для вашего сценария. Причина может заключаться в том, что к библиотеке одновременно обращается слишком много людей. Чтобы избежать этой ошибки, попробуйте одно из следующих решений:
- Скопируйте и вставьте код библиотеки в свой скрипт и удалите зависимость от библиотеки.
- Скопируйте сценарий библиотеки и разверните его как библиотеку из своей учетной записи. Обязательно обновите зависимость в исходном скрипте до новой библиотеки, а не общедоступной.
Отладка
Не все ошибки приводят к отображению сообщения об ошибке. Может быть более тонкая ошибка, когда код технически правильный и может выполняться, но результаты не такие, как вы ожидаете. Вот несколько стратегий для обработки таких ситуаций и дальнейшего изучения сценария, который работает не так, как вы ожидаете.
логирование
Во время отладки часто полезно записывать информацию по мере выполнения проекта сценария. Сценарий Google Apps имеет два метода регистрации информации: служба ведения журнала в облаке и более простые службы Logger и консоли , встроенные в редактор сценариев приложений.
Дополнительные сведения см. в руководстве по ведению журнала .
Отчет об ошибках
Исключения, возникающие из-за ошибок во время выполнения, автоматически записываются с помощью службы отчетов об ошибках Google Cloud. Эта служба позволяет искать и фильтровать сообщения об исключениях, создаваемые вашим проектом сценария.
Чтобы получить доступ к отчетам об ошибках, см. Просмотр журналов Cloud и отчетов об ошибках в консоли Google Cloud Platform .
Казни
Каждый раз, когда вы запускаете скрипт, Apps Script делает запись о его выполнении, включая журналы Cloud. Эти записи могут помочь вам понять, какие действия выполнял ваш скрипт.
Чтобы просмотреть выполнение вашего скрипта в проекте Apps Script, слева щелкните Executions
.Проверка состояния службы скриптов приложений
Хотя и редко, иногда определенные службы Google Workspace(такие как Gmail или Диск) сталкиваются с временными проблемами, которые могут привести к перебоям в обслуживании. В этом случае проекты Apps Script, взаимодействующие с этими службами, могут работать не так, как ожидалось.
Вы можете проверить, есть ли сбой службы Google Workspace , просмотрев панель мониторинга состоянияGoogle Workspace . Если в настоящее время происходит сбой, вы либо ждете его устранения, либо ищете дополнительную помощь в справочном центреGoogle Workspace или в документации по известным проблемамGoogle Workspace .
Используйте отладчик и точки останова
Чтобы обнаружить проблемы в вашем скрипте, вы можете запустить его в режиме отладки. При запуске в режиме отладки сценарий приостанавливается, когда достигает точки останова, то есть строки, которую вы выделили в своем сценарии и которая, по вашему мнению, может иметь проблему. Когда скрипт приостанавливается, он отображает значение каждой переменной в этот момент времени, что позволяет вам проверить внутреннюю работу скрипта без добавления большого количества операторов регистрации.
Добавить точку останова
Чтобы добавить точку останова, наведите указатель мыши на номер строки, в которую вы хотите добавить точку останова. Слева от номера строки щелкните кружок. На изображении ниже показан пример точки останова, добавленной в скрипт:
Запустить скрипт в режиме отладки
Чтобы запустить скрипт в режиме отладки, в верхней части редактора нажмите Отладка .
Прежде чем скрипт запустит строку с точкой останова, он приостанавливается и отображает таблицу отладочной информации. Вы можете использовать эту таблицу для проверки таких данных, как значения параметров и информация, хранящаяся в объектах.
Чтобы управлять выполнением скрипта, в верхней части панели отладчика используйте кнопки «Вход», «Вход» и «Выход». Это позволяет вам запускать сценарий по одной строке за раз и проверять, как значения меняются с течением времени.
Проблемы с несколькими аккаунтами Google
Если вы вошли в несколько учетных записей Google одновременно, у вас могут возникнуть проблемы с доступом к надстройкам и веб-приложениям. Мультилогин или вход в несколько учетных записей Google одновременно не поддерживается для сценариев приложений, надстроек или веб-приложений.
Если вы откроете редактор скриптов приложений , войдя в более чем одну учетную запись, Google предложит вам выбрать учетную запись, с которой вы хотите продолжить.
Если вы открываете веб-приложение или надстройку и испытываете проблемы с несколькими входами в систему, попробуйте одно из следующих решений:
- Выйдите из всех своих учетных записей Google и войдите только в ту, в которой есть надстройка или веб-приложение, к которым вы хотите получить доступ.
- Откройте окно в режиме инкогнито в Google Chrome или аналогичное окно приватного просмотра и войдите в учетную запись Google, в которой есть надстройка или веб-приложение, к которому вы хотите получить доступ.
Получать помощь
Отладка проблемы с помощью перечисленных выше инструментов и методов может решить множество проблем, но могут быть проблемы, с которыми вы столкнетесь, для решения которых потребуется дополнительная помощь. Посетите нашу страницу поддержки, чтобы узнать, где задавать вопросы и сообщать об ошибках.