我正在编写一个函数,需要在ping基于Web的API时捕获速率限制错误.
我tryCatch用来捕获错误,并在此函数内我指定以下错误函数:
error=function(e) {
warning(paste(e,"\nWaiting an hour for rate limit to reset..."))
Sys.sleep(3600) # Wait an hour for rate-limit to reset
return(user.info(user, ego.count))
}
Run Code Online (Sandbox Code Playgroud)
该函数似乎有效,但在检查脚本的输出日志时,我注意到在睡眠时间用完之后才会写入警告消息.
我可以在R控制台上重现此行为:
print("Drew sucks")
Sys.sleep(10)
Run Code Online (Sandbox Code Playgroud)
之前十秒钟Drew sucks打印到控制台.在我的功能中,我想在暂停发生之前向用户提供关于这个长暂停的一些反馈.
是什么导致了这种行为?
您需要设置immediate.=TRUE 警告功能,或设置options(warn=1); 并且可能需要flush.console()在Sys.sleep()呼叫之前添加(在某些操作系统上).
foo <- function() {
warning("uh-oh...", immediate.=TRUE)
flush.console()
Sys.sleep(5)
"done"
}
foo()
# Warning in foo() : uh-oh...
# [1] "done"
Run Code Online (Sandbox Code Playgroud)
具体内容在"细节"部分详细说明?warning.换句话说,"如果选项(警告= 0),则在顶级功能完成后存储和打印警告;如果选项(警告= 1),则在发生时打印它们."
为了它的地狱,尝试:
system(sprintf('sleep %d', seconds))
Run Code Online (Sandbox Code Playgroud)
假设您在路径上有常用的 *NIX sleep 命令。
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |