问题排查

即使是最有经验的开发者也很少会在首次启动应用时正确编写代码 尝试,因此故障排除是开发过程的重要组成部分。在 在本部分中,我们将介绍一些技巧,这些技巧可以帮助您找到、了解和 调试脚本中的错误

错误消息

当您的脚本遇到错误时,系统会显示一条错误消息。消息 带有用于排查问题的行号。有两个基本 以这种方式显示的错误类型:语法错误运行时错误

语法错误

如果编写的代码未遵循 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 行)

导致这些错误更难进行问题排查的是 您传递到函数的内容不是用代码编写,而是 来自电子表格、表单或其他外部数据源的数据。使用调试 以下技巧可帮助您确定导致这些错误的原因。

常见错误

下面列出了常见错误及其原因。

服务调用次数过多:<操作名称>

此错误表示您已经超过了给定操作的每日配额。 例如,如果您在邮件标头中发送过多电子邮件, 。为使用方、网域和 专业版账号,且随时可能变更,恕不另行通知 发布公告您可以在 Apps 脚本配额文档

服务器不可用。服务器发生错误,请重试。

导致此类错误的原因可能有以下几种:

  • Google 服务器或系统暂时不可用。等待片刻 然后再次尝试运行该脚本
  • 您的脚本中有错误,但没有相应的错误 消息。请尝试调试您的脚本,看看能否查明问题。
  • Google Apps 脚本中的一个错误会导致此错误。对于 有关如何搜索和提交错误报告的说明,请参阅 错误。在提交新 bug 之前,请先搜索 看看其他人是否已报告过该错误。

需要授权才能执行该操作。

此错误表示脚本缺少运行所需的授权。 在“脚本编辑器”中或通过自定义菜单项运行某个脚本时, 向用户显示的授权对话框。然而,当脚本通过 从触发器、嵌入 Google 协作平台页面或作为服务运行, 对话框无法显示,并显示此错误。

如需授权脚本,请打开“脚本编辑器”并运行任意函数。通过 系统会显示授权提示,以便您为脚本项目授权。如果 脚本包含新的未授权服务,您需要重新授权该脚本。

此错误通常是 触发器, 用户已授权他们。如果您无权访问脚本项目 (由于该错误发生在您网站上的插件中, 则您通常可以使用插件授权 。如果触发器继续触发并导致此错误,您可以移除 执行以下操作:

  1. 在 Apps 脚本项目左侧,点击触发器
  2. 在要移除的触发器右侧,点击“更多”图标 &gt;删除触发器

您还可以通过以下方法移除有问题的插件触发器: 卸载该插件

访问遭拒:DriveApp网域政策已停用第三方云端硬盘应用

网域的管理员 Google Workspace 拥有 停用 Drive API,这会阻止其用户 安装和使用 Google 云端硬盘应用。此设置还会禁止 Google Apps 脚本插件 云端硬盘服务高级云端硬盘服务 (即使在管理员停用 Drive API 之前脚本就已获得授权)。

不过,如果您为 Google 服务发布了使用云端硬盘服务的插件或 Web 应用, 全网域安装 由管理员为网域中的部分或所有用户安装 脚本函数,即使在 网域。

脚本无权获取活跃用户的身份。

表示活跃用户的身份和电子邮件地址不可用于 脚本。此警告是对 Session.getActiveUser()。 它也可能是由对 Session.getEffectiveUser() 如果脚本在 AuthMode.FULL。 如果此警告发出,则后续调用 User.getEmail() 仅返回 ""。

您可以采用多种方法对此警告进行问题排查,具体取决于 授权模式。授权模式 触发的函数中会公开 eauthMode 属性 事件参数

缺少库

如果您为脚本添加了一个热门, 您可能会收到错误消息 即使该库被列为 您的脚本。原因可能是访问该库的人过多 。要避免此错误,请尝试以下解决方案之一:

  • 复制库的代码并将其粘贴到脚本中,然后移除库 依赖项。
  • 复制库脚本,并在您的账号中将其作为库部署。确保 将原始脚本中的依赖项更新为新库 而不是公开链接

缺少库版本或部署版本,导致发生错误。错误代码 Not_Found

此错误消息表示以下某种情况:

  • 部署的脚本版本已被删除。要更新已部署的 请参阅修改 部署
  • 脚本使用的库版本已被删除。要确认 点击库名称旁的 更多 &gt; 在新标签页中打开。缺少的库 会显示错误消息。找到需要更新的库后,请 执行以下其中一项操作:
    • 更新库以使用其他版本。请参阅更新 库
    • 从脚本项目和代码中移除已删除的库。请参阅 移除库
  • 您的脚本所使用的库的脚本包含 使用已删除版本的库。请执行以下任一操作:
    • 如果您对脚本所用库拥有编辑权限,请更新 复制到现有版本
    • 更新库以使用其他版本。请参阅更新 库
    • 从脚本项目和代码中移除库。请参阅 移除库

使用高级服务调用 Google Chat API 时为 Error 400: invalid_scope

如果您遇到 Error 400: invalid_scope 并显示错误消息 Some requested scopes cannot be shown, 则表示您未在 Apps 脚本项目的 appsscript.json 文件。在大多数情况下 Apps 脚本会自动确定脚本需要的范围, 但使用 Chat 高级服务时 授权范围 Apps 脚本项目的清单文件。请参阅 设置显式范围

如需解决该错误,请添加适当的授权范围 附加到 Apps 脚本项目的 appsscript.json 文件中, oauthScopes 数组。例如,要调用 spaces.messages.create 方法,请添加以下内容:

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

调试

并非所有错误都会导致显示错误消息。可能还有更多 这种微小错误,即代码在技术上是正确的,并且可以执行, 结果与您的预期不符。下面介绍了一些策略 并进一步调查运行失败的脚本, 预期。

日志记录

进行调试时,将信息记录为脚本项目往往很有帮助 执行。Google Apps 脚本有两种记录信息的方法: Cloud Logging 服务 以及更基本的日志记录器和控制台服务 Google Apps 脚本编辑器中内置的所有 API。

如需了解详情,请参阅 Logging 指南

Error Reporting

因运行时错误而发生的异常 使用 Google Cloud Error Reporting 服务记录。通过这项服务 搜索和过滤您的脚本项目创建的异常消息。

要访问 Error Reporting,请参阅在 Google Cloud Platform 控制台

执行

每次您运行某个脚本时,Apps 脚本都会记录执行情况, 包括 Cloud 日志这些记录有助于您了解哪些 执行的操作。

要在 点击左侧的执行项

检查 Apps 脚本服务状态

虽然很少见,但有时是针对特定 Google Workspace 服务(例如 Gmail 或云端硬盘) 暂时性问题,可能会导致服务中断。当 与这些服务交互的 Apps 脚本项目可能无法运行 按预期运行

您可以查看是否有 Google Workspace 服务 查看服务中断情况 Google Workspace 状态信息中心。 如果服务中断 ,您可以等待问题得到解决,也可以寻求 请参阅 Google Workspace 帮助中心Google Workspace 已知问题 文档。

使用调试程序和断点

如需找出脚本中的问题,您可以在调试模式下运行该脚本。运行时 调试模式时,脚本会在遇到断点时暂停,断点是您在 以指明您认为可能存在问题的类别。当某个脚本 暂停显示 每个变量在该时间点的值,让您可以检查 而无需添加大量日志语句。

添加断点

要添加断点,请将鼠标悬停在要添加断点的行的行号上 断点。点击行号左侧的圆圈。以下 图中显示了添加到脚本中的断点的示例:

添加断点

在调试模式下运行脚本

如需在调试模式下运行脚本,请点击编辑器顶部的调试

在脚本运行包含断点的代码行之前,它会暂停并显示 调试信息表。您可以使用此表来检查 参数值和对象中存储的信息。

如需控制脚本的运行方式,请在“Debugger”面板的顶部 使用“Step in”、“Step over”和“Step out”按钮。通过这些参数,您可以 一次编写一行脚本,并检查值随时间变化的情况。

关于多个 Google 账号的问题

如果同时登录了多个 Google 账号,您可能会想 无法访问插件和 Web 应用。 多账号登录,或 一次登录到多个 Google 账号的功能,不支持 Google Apps 脚本、插件或 Web 应用。

  • 如果您在登录多个账号的情况下打开 Apps 脚本编辑器, Google 提示 请选择要继续操作的账号。

  • 如果您打开 Web 应用或插件时遇到多账号登录问题,请尝试以下做法之一: 以下解决方案:

    • 请退出您所有的 Google 账号,仅登录具有 插件或 Web 应用。
    • 在 Google Chrome 中打开无痕式窗口,或进行等效的无痕浏览 窗口,并登录您安装了插件或 Web 应用的 Google 账号 访问。

获取帮助

使用上面列出的工具和技巧调试问题可以解决 但您可能会遇到一些问题 需要额外帮助请参阅我们的支持页面 有关在何处提问和报告 bug 的信息。