使用R中的trycatch抑制系统错误

Aas*_*shu 2 error-handling r try-catch

我无法抑制错误,虽然我的pdf文件正在转换为文本,但我无法抑制此错误.

 tryCatch(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T))
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
> suppressWarnings(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T))
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
>tryCatch(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T), error = function(e) e)
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
> suppressMessages(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T))
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
> tryCatch(suppressWarnings(capture.output(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T))), error = function(e) e)
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
character(0)
> tryCatch({system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T)}, error = function(e) e)
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Run Code Online (Sandbox Code Playgroud)

有什么理由我无法抑制它吗?我怎么能摆脱这个错误?谢谢.

编辑

随着silent=TRUEfunction(e){invisible(e)}

tryCatch(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T), error = function(e){invisible(e)})
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
> try(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = T),silent=TRUE)
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Syntax Error: Missing or invalid 'Bounds' entry in stitching function
Run Code Online (Sandbox Code Playgroud)

EDITED

它停止了错误,但它也停止了功能,pdf文件没有被转换为文本.

tryCatch(system2(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = TRUE, 
                 stdout=TRUE, stderr=TRUE), 
         error=function(err) NA)
[1] NA
Run Code Online (Sandbox Code Playgroud)

源代码

dest=paste("C:/wamp/www/LU/my/pdffiles",file_list[i],sep="/")
exe <- "C:\\Program Files\\xpdfbin-win-3.03\\bin32\\pdftotext.exe"
try(system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = TRUE),
    silent=TRUE)
Run Code Online (Sandbox Code Playgroud)

Mar*_*gan 6

通常人们会写

tryCatch({
    system("xyz")
}, error=function(err) {
    ## do something with 'err', then maybe throw it again stop(err)
    ## or providing an alternative return value
    NA
})
Run Code Online (Sandbox Code Playgroud)

所以

> xx = tryCatch(stop("oops"), error=function(err) NA)
> xx
[1] NA
Run Code Online (Sandbox Code Playgroud)

但似乎有些错误system()不能以这种方式被捕获.

> xx = tryCatch(system("foobar"), error=function(err) NA)
sh: 1: foobar: not found
Run Code Online (Sandbox Code Playgroud)

可以完成某些事情的提示来自xx的值:

> xx
[1] 127
Run Code Online (Sandbox Code Playgroud)

system2()在我们看到的地方,帮助页面首先指向我们

If 'stdout = TRUE' or 'stderr = TRUE', a character vector giving
the output of the command, one line per character string.  (Output
lines of more than 8095 bytes will be split.)  If the command
could not be run an R error is generated.
Run Code Online (Sandbox Code Playgroud)

果然

> tryCatch(system2("foobar", stdout=TRUE, stderr=TRUE), error=function(err) NA)
[1] NA
Run Code Online (Sandbox Code Playgroud)