You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中Drive Service的Try-Catch未按预期工作

解决Google Apps Script中302跳转错误无法被Try-Catch捕获的问题

你遇到的302 "Moved Temporarily" HTML错误,本质是底层HTTP跳转异常未被Apps Script运行时包装为标准Error对象,导致常规try-catch无法捕获,直接返回错误页面。这种情况通常出现在文件归他人所有、无修改权限,或文件已被移动时。

解决方案1:前置权限检查(推荐)

在执行删除操作前,先验证当前用户是否为文件所有者,提前规避无权限操作触发的错误:

try {
  const targetFile = DriveApp.getFileById(fileId);
  const currentUser = Session.getActiveUser().getEmail();
  const fileOwner = targetFile.getOwner().getEmail();

  if (currentUser !== fileOwner) {
    Logger.log(`无权限删除文件:文件所有者为 ${fileOwner}`);
    return;
  }

  targetFile.setTrashed(true);
  Logger.log("文件已成功标记为删除");
} catch (error) {
  // 处理其他未知错误,兼容非标准异常
  const errorDetail = typeof error === "object" ? JSON.stringify(error) : String(error);
  Logger.log(`删除操作出错:${errorDetail}`);
}

解决方案2:使用Drive高级服务捕获标准错误

启用Drive高级服务后,API会返回结构化的错误对象,更容易捕获权限或资源不存在类错误:

  1. 在脚本编辑器中点击「服务」→ 添加服务 → 选择「Drive」并启用
  2. 使用以下代码:
try {
  Drive.Files.update({trashed: true}, fileId);
  Logger.log("文件已成功标记为删除");
} catch (error) {
  Logger.log(`删除出错:错误码 ${error.code},信息:${error.message}`);
}

当无权限时,会返回明确的403错误,而非302 HTML页面,错误信息可直接通过error.message获取。

为什么原代码无法捕获错误?

原代码的try-catch只能捕获Apps Script运行时抛出的标准Error实例,而302跳转属于底层HTTP请求异常,此时脚本直接返回错误HTML内容,未将其包装为可捕获的Error对象,导致catch块无法执行。

内容的提问来源于stack exchange,提问作者Randall Zapata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:10:00