即使是经验最丰富的开发者,也很少能一次性正确编写代码,因此问题排查是开发过程中的重要环节。本部分介绍了一些技巧,可帮助您查找、了解和调试脚本中的错误。
错误消息
当脚本遇到错误时,系统会显示一条包含行号的错误消息。错误分为两种基本类型:语法错误和运行时错误。
语法错误
当代码不符合 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 脚本配额文档。
服务器不可用。或服务器出错,请重试。
可能的原因包括:
- Google 服务器暂时不可用。请稍后再试。
- 脚本中的错误缺少相应的消息。尝试进行调试以找出问题。
- Google Apps 脚本中存在 bug。在 Bugs 中搜索并提交 bug 报告。
需要授权才能执行该操作。
脚本缺少运行所需的授权。当脚本通过触发器运行或作为服务运行时,无法显示授权对话框。
如需授权脚本,请打开脚本编辑器并运行任意函数。如果脚本使用了新的未经授权的服务,您必须重新授权。
在授权之前或过期之后触发的触发器通常会导致此错误。如果某个插件导致了此问题,请再次使用该插件重新授权。移除有问题的触发器:
- 在 Apps 脚本项目中,点击触发器图标 。
- 在触发器旁边,依次点击更多图标 >“删除触发器”。
或者,您也可以卸载该插件。
精细权限也可能会导致这些错误。如需了解如何保护触发器执行,请参阅授权范围页面。
访问遭拒:DriveApp 或网域政策已停用第三方云端硬盘应用
Google Workspace 管理员可以为其网域停用 Drive API,这样可防止用户使用采用 Drive 服务的云端硬盘应用或 Apps 脚本插件。
如果插件或 Web 应用是针对网域范围的安装而发布的,并且由管理员安装,那么即使 Drive API 已停用,脚本也能正常运行。
脚本无权获取活跃用户的身份。
活跃用户的身份和电子邮件地址不可用。这是在 AuthMode.FULL 以外的授权模式下调用 Session.getActiveUser() 或 Session.getEffectiveUser() 导致的。
如果您的脚本通过触发器运行,您可以在 Apps 脚本事件对象的 authMode 属性中找到授权模式。
请根据授权模式排查此问题:
- 在
AuthMode.FULL中,请考虑改用Session.getEffectiveUser()。 - 在
AuthMode.LIMITED中,确保所有者已授权脚本。 - 在其他授权模式下,请避免调用这两种方法。
- 如果您是 Google Workspace 客户,并且最近开始遇到来自可安装触发器的此警告,请确保该触发器以贵组织中的用户身份运行。
缺少库
如果同时访问某个库的人数过多,该库可能会被报告为缺失。如需解决此问题,请执行以下操作:
- 将库的代码直接复制到脚本中。
- 从您自己的账号复制并部署该库。
- 如果脚本不需要该库也能正常运行,请从脚本项目中移除该库。
缺少库版本或部署版本,导致发生错误。错误代码 Not_Found
此错误消息表示存在以下某种情况:
- 部署所用的脚本版本已被删除。如需解决此问题,请修改部署并选择其他脚本版本。
- 脚本使用的某个库版本已被删除。如需解决此问题,请在脚本编辑器中的“库”下找到相应库,然后更新到其他版本或移除该库。如需更新,请点击版本号,然后选择其他版本。如需移除,请依次点击“更多”图标 >“移除”。
- 一个库包含另一个库,但后者的版本已被删除。如需解决此问题,请与库的作者联系,或使用脚本所用库的其他版本。
使用高级服务调用 Google Chat API 时,出现“错误 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"
]
您的管理员不允许通过 UrlFetch 调用 <网址>
Google Workspace 管理员可以使用许可名单来控制外部网域访问权限。请与您的管理员联系,将相应网址添加到许可名单中。
调试
有些错误很细微,不会触发消息。例如,您的代码可能能够执行,但结果不符合预期。 使用以下策略来调查行为异常的脚本。
日志记录
在脚本编辑器中使用 Cloud Logging 服务或 Logger 和控制台服务,在脚本执行时记录信息。
Error Reporting
如需在 Google Cloud 中使用 Error Reporting,请使用标准的用户管理型项目,而不是默认项目。
使用标准项目时,系统会自动在 Google Cloud Error Reporting 中记录运行时错误。 在 Google Cloud 控制台中查看 Cloud 日志和错误报告。
执行
Google Apps 脚本会记录每次执行,包括云日志。如需查看执行情况,请点击执行图标 。
检查服务状态
在 Google Workspace 状态信息中心中查看 Google Workspace 服务中断情况。
使用调试程序和断点
如需查找脚本中的问题,您可以在调试模式下运行脚本。在调试模式下运行脚本时,当脚本到达断点(您在脚本中突出显示的可能存在问题的行)时,脚本会暂停。当脚本暂停时,它会显示每个变量在该时间点的值,让您无需添加大量日志记录语句即可检查脚本的内部运作情况。
添加断点
如需添加断点,请将鼠标悬停在要添加断点的行号上。点击行号左侧的圆圈。下图显示了向脚本添加断点的示例:

在调试模式下运行脚本
如需在调试模式下运行脚本,请点击编辑器顶部的调试。
在脚本运行包含断点的行之前,它会暂停并显示一个调试信息表。您可以使用此表检查参数值和存储在对象中的信息等数据。
如需控制脚本的运行方式,请使用调试器面板顶部的“步入”“步过”和“步出”按钮。借助这些工具,您可以逐行运行脚本,并检查值随时间的变化情况。
错误:当前行没有源代码

当没有可用的有效调试文件时,系统会显示此错误。
Google Apps 脚本不支持在脚本编辑器中显示动态生成的 JavaScript (JS) 脚本,例如使用 eval() 和 new Function() 生成的脚本。这些脚本在 V8 引擎中创建和执行,但在编辑器中不显示为独立文件。如果您单步执行这些脚本,就会遇到此错误。
例如,请参考以下代码:
function myFunction() {
eval('a=2');
}
当 eval() 被调用时,其参数会被视为 JS 代码,并在 V8 引擎中作为动态创建的脚本运行。如果您步入 eval(),则会显示此错误。如果脚本包含 //# sourceURL 注释,则其名称会显示在调用堆栈中。否则,它会显示为未命名的条目。
尽管显示了错误消息,但调试会话仍处于活动状态,并且可以继续执行。如需继续,请继续执行单步进入、单步跳出或恢复执行。不过,只要执行仍处于动态脚本的范围内,此错误就会继续显示。执行移出动态脚本后,调试会继续进行,而不会出现此错误。
多个 Google 账号的问题
如果您同时登录多个 Google 账号,则可能无法正常访问插件和 Web 应用。 Apps 脚本、插件或 Web 应用不支持多重登录或同时登录多个 Google 账号。
如果您在登录多个账号的情况下打开 Apps 脚本编辑器,Google 会提示您选择要继续使用的账号。
如果您打开某个 Web 应用或插件时遇到多重登录问题,请尝试以下解决方案之一:
- 退出您所有的 Google 账号,然后仅登录包含您要访问的插件或 Web 应用的账号。
- 在 Google Chrome 中打开无痕式窗口或其他等效的无痕浏览窗口,然后登录包含您要访问的插件或 Web 应用的 Google 账号。
获取帮助
访问我们的支持页面,提出问题或提交 bug。