Jak zapobiec wykonaniu kolejnych kroków kodu po błędzie?
Jak mogę się upewnić, że po „złapaniu” błędu i zarejestrowaniu go nie zostaną wykonane kolejne kroki kodu (nie chcę używać q ())?
Mój scenariusz użycia wygląda następująco: - wykonaj kilka obliczeń - jeśli wystąpi błąd, zapisz go - przestań wykonywać dalsze kroki w kodzie
Próbowałem rozwiązać ten problem za pomocą poniższego przykładu kodu (druk jest używany zamiast prawdziwej funkcji rejestrowania):
handleMySimpleError<-function(e, text) {
# Let's log the error
print(paste0(text, ": ", e))
# This should stop execution of any further steps but it doesn't
stop("Now, stop. For real.")
}
print("Starting execution...")
tryCatch(
stop("My simple error."),
error=function(e) {handleMySimpleError(e, "could not finish due to")}, finnaly=NULL
)
print("Successfully ended execution...")
W jakiś sposób miałem nadzieję, że wydruk („Pomyślnie zakończone wykonanie ...”) nigdy nie zostanie wykonany ... Ale oto wyjście, które otrzymuję:
> handleMySimpleError<-function(e, text) {
+ # Let's log the error
+ print(paste0(text, ": ", e))
+ # This should stop execution of any further steps but it doesn't
+ stop("Now, stop. For real.")
+ }
>
> print("Starting execution...")
[1] "Starting execution..."
> tryCatch(
+ stop("My simple error."),
+ error=function(e) {handleMySimpleError(e, "could not finish due to")}, finnaly=NULL
+ )
[1] "could not finish due to: Error in doTryCatch(return(expr), name, parentenv, handler): My simple error.\n"
Error in handleMySimpleError(e, "could not finish due to") :
Now, stop. For real.
> print("Successfully ended execution...")
[1] "Successfully ended execution..."
Jak zapobiec wykonywaniu wydruku („Pomyślnie zakończone wykonanie ...”)? Jaka jest właściwa strategia zatrzymania przetwarzania kodu po zalogowaniu błędu w funkcji obsługi błędów?