Dừng lại (ngay bây giờ)

Lập trình R theo hướng phòng thủ

Dr. Colin Gillespie

Jumping Rivers

Tôi thấy dấu hiệu

Đôi khi mọi thứ bị hỏng thật

  • Ta cần phát sinh lỗi

Ví dụ:

1 + "stuff"
Error in 1 + "stuff": non-numeric argument to binary operator
Lập trình R theo hướng phòng thủ

Dừng ngay bây giờ, cảm ơn rất nhiều

Để phát sinh lỗi, dùng hàm stop()

stop("A Euro 1996 error has occurred")
# Error: A Euro 1996 error has occurred
conf_int <- function(mean, std_dev) {
   if(std_dev <= 0) 
       stop("Standard deviation must be positive")

   c(mean - 1.96 * std_dev, mean - 1.96 * std_dev)
}
Lập trình R theo hướng phòng thủ

Bắt lỗi ngay khi có thể

  • Không thể chặn (hoặc bỏ qua) lỗi
    • Định nghĩa của lỗi: R không thể tiếp tục
    • Thay vào đó, ta bắt lỗi

Lập trình R theo hướng phòng thủ

Hàm try()

Hàm try() hơi giống suppress()

res <- try("Scotland" + "World cup", silent = TRUE)

Nó cố chạy lệnh; nếu không được, nó bỏ qua và tiếp tục

Lập trình R theo hướng phòng thủ

Mẫu try()

res <- try("Scotland" + "World cup", silent = TRUE)
res
[1] 'Error in "Scotland" + "World cup": non-numeric argument to binary operator'
attr(,"class")
[1] "try-error"
attr(,"condition")
<simpleError in "Scotland" + "World cup": 
                            non-numeric argument to binary operator>
Lập trình R theo hướng phòng thủ

Mẫu try()

result <- try("Scotland" + "World cup", silent = TRUE)
class(result)
[1] "try-error"
if(class(result) == "try-error")
  ## Do something useful
Lập trình R theo hướng phòng thủ

Ayo berlatih!

Lập trình R theo hướng phòng thủ

Preparing Video For Download...