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会返回结构化的错误对象,更容易捕获权限或资源不存在类错误:
- 在脚本编辑器中点击「服务」→ 添加服务 → 选择「Drive」并启用
- 使用以下代码:
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
相关产品推荐
相关产品推荐

