R语言循环获取VKontakte数据遇私有账号报错如何跳过继续执行
问题原因
你之前使用的tryCatch()缺少错误处理分支定义,当getWallExecute()触发私有账号报错时没有对应的捕获逻辑,因此程序依然会直接中断,无法继续执行后续循环。
修正后可实现跳过报错的代码
library(vkR) for(user in na.omit(user_id_df$user_id)) { cat("Downloading VK data for user ", user, "...\n", sep = "") # 获取VK用户数据,捕获所有报错 VK_data <- tryCatch( expr = { getWallExecute(owner_id = user, count = 0) }, error = function(e) { # 报错时输出提示,返回NULL cat("User ", user, " 为私有账号或请求失败,跳过当前用户,错误信息:", e$message, "\n", sep = "") return(NULL) } ) # 仅当成功拿到有效数据时才保存文件 if(!is.null(VK_data)) { saveRDS(VK_data, paste0(user, "_VK_user.rds")) cat("User ", user, " 数据保存成功\n", sep = "") } }
代码逻辑说明
- 当
getWallExecute()触发任何错误(包括私有账号报错、网络请求失败等)时,都会进入error分支,输出对应的提示信息并返回NULL - 后续会判断
VK_data是否为NULL,只有非空的有效数据才会写入本地rds文件 - 错误处理完成后会自动进入下一个用户ID的循环,不会打断整体遍历流程
内容的提问来源于stack exchange,提问作者Marco Liedecke
相关产品推荐
相关产品推荐

