如何使用tryCatch()忽略R中while循环中的错误

时间:2019-01-17 18:15:11

标签: r web-scraping while-loop

我有一个代码,可读取数据框第一列的每一行,访问网站,然后下载每位副手的照片。但这不能正常工作,因为有些代表还没有照片。

这就是为什么我的代码中断并停止工作的原因。我尝试使用“ next”和if子句,但仍然无法正常工作。因此,一个朋友建议我使用tryCatch()。我在网上找不到足够的信息,并且代码仍然无法正常工作。

文件在这里: https://gist.github.com/gabrielacaesar/940f3ef14eaf29d18c3780a66053bbee

deputados <- fread("dep-legislatura56-14jan2019.csv")

i <- 1

while(i <= 514) {
  this.could.go.wrong <- tryCatch(
  attemptsomething(),
  error=function(e) next
  )
  url <- deputados$uri[i]
  api_content <- rawToChar(GET(url)$content)
  pessoa_info <- jsonlite::fromJSON(api_content)
  pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
  download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
  Sys.sleep(0.5)
  i <- i + 1
}

2 个答案:

答案 0 :(得分:3)

这是使用purrr的解决方案:

library(purrr)

download_picture <- function(url){
  api_content <- rawToChar(httr::GET(url)$content)
  pessoa_info <- jsonlite::fromJSON(api_content)
  pessoa_foto <- pessoa_info$dados$ultimoStatus$urlFoto
  download.file(pessoa_foto, basename(pessoa_foto), mode = "wb")
}

walk(deputados$uri, possibly(download_picture, NULL))

答案 1 :(得分:1)

Private Sub ComboBox1_Change() If ComboBox1.Text <> "Europe" Then MsgBox "The Analysis Selected is wrong" End If End Sub 简单地包装在可能引起错误的行上,并使其在 error 块上返回tryCatchNULL

NA