0Pricing
R Academy · Ders

Hata Kurtarma için tryCatch()

tryCatch() ile hataları, uyarıları ve iletileri yakalayıp işleyin.

Hata Kurtarma için tryCatch(), CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

tryCatch() Nedir?

tryCatch(), bir ifadeyi çalıştırmanıza ve onun bildirdiği tüm koşulları (hatalar, uyarılar, iletiler) yakalamanıza olanak tanır. İfade başarılı olursa değeri döndürülür. Bir koşul bildirirse bunun yerine eşleşen işleyici çağrılır.

result <- tryCatch({
  sqrt(16)
}, error = function(e) {
  NA
})
cat('Result:', result, '\n')

Bir Hatayı Yakalama

tryCatch() içindeki ifade stop() çağırdığında yürütme error işleyicisine geçer. İşleyici koşul nesnesini alır ve değerini tüm tryCatch() çağrısının sonucu olarak döndürür.

safe_divide <- function(x, y) {
  tryCatch({
    if (y == 0) stop('division by zero')
    x / y
  }, error = function(e) {
    cat('Caught error:', conditionMessage(e), '\n')
    NA
  })
}
cat(safe_divide(10, 2), '\n')
cat(safe_divide(10, 0), '\n')

Bir Uyarıyı Yakalama

warning işleyicisi error işleyicisiyle aynı şekilde çalışır, ancak uyarı koşullarını yakalar. Not: tryCatch() içinde bir warning işleyicisi tanımlandığında uyarılar da hatalar gibi yerel olmayan bir çıkışa neden olur; yürütme uyarıdan sonra devam etmez.

result <- tryCatch({
  log(-1)
}, warning = function(w) {
  cat('Warning caught:', conditionMessage(w), '\n')
  -999
})
cat('Result:', result, '\n')

Bir Mesajı Yakalama

message() koşullarını da yakalayabilirsiniz. Bu, denetlemediğiniz işlevlerin bilgilendirici çıktısını araya girerek yeniden biçimlendirmenizi sağlar. İşleyici koşul nesnesini alır ve mesajın metni, sonunda bir satır sonu karakteri içerir.

result <- tryCatch({
  message('Loading data...')
  42
}, message = function(m) {
  cat('Intercepted message:', trimws(conditionMessage(m)), '\n')
  -1
})
cat('Result:', result, '\n')

finally Yan Tümcesi

finally bloğu, ifade başarılı olsa, hata verse veya uyarı üretse de ifadenin ardından her zaman çalışır. Bağlantıları kapatma, seçenekleri sıfırlama veya tamamlanmayı günlüğe kaydetme gibi temizleme kodları için kullanın.

result <- tryCatch({
  cat('Trying...\n')
  stop('oops')
}, error = function(e) {
  cat('Handled:', e$message, '\n')
  -1
}, finally = {
  cat('Finally block always runs\n')
})
cat('Result:', result, '\n')

Birden Çok İşleyici

Tek bir tryCatch() çağrısında birden çok koşul türü için işleyiciler sağlayabilirsiniz. R, uygulanabilir ilk işleyiciyi eşleştirir. Hem error hem de warning işleyicileri tanımlanırsa uyarılar hataya dönüşmeden önce yakalanır.

handle_it <- function(expr_result) {
  tryCatch(expr_result,
    error   = function(e) paste('ERROR:', e$message),
    warning = function(w) paste('WARN:', w$message),
    message = function(m) paste('MSG:', trimws(m$message))
  )
}
cat(handle_it(stop('bad input')), '\n')
cat(handle_it(log(-1)), '\n')

Döngüde Hata Kurtarma

Çok kullanışlı bir kalıp, bir başarısız yinelemenin döngünün tamamını durdurmaması için döngünün gövdesini tryCatch() içine almaktır. Bu, öngörülemeyen biçimde başarısız olabilecek dosyaları, API çağrılarını veya kullanıcı girdilerini işlerken zorunludur.

inputs <- list(4, -1, 0, 16, 'x')
results <- vector('list', length(inputs))
for (i in seq_along(inputs)) {
  results[[i]] <- tryCatch(
    sqrt(as.numeric(inputs[[i]])),
    warning = function(w) NA,
    error   = function(e) NA
  )
}
cat('Results:', unlist(results), '\n')

Hata Durumunda Anlamlı Varsayılanlar Döndürme

Temiz bir yaklaşım, hata işleyicisinden makul bir varsayılan değer döndürmektir. İşleyicinin dönüş değeri tryCatch() sonucuna dönüşür. NA, NULL, 0 veya varsayılan bir liste döndürmenin tümü iyi sonuç verir.

safe_parse <- function(x) {
  tryCatch(
    as.numeric(x),
    warning = function(w) {
      cat('Cannot parse:', x, '-> using 0\n')
      0
    }
  )
}
cat(safe_parse('3.14'), '\n')
cat(safe_parse('abc'), '\n')
cat(safe_parse('99'), '\n')

Hata Mesajını Çıkarma

Bir hata işleyicisinin içinde, hata metnini almak için conditionMessage(e) işlevini veya kısa biçim olan e$message ifadesini kullanın. Hatanın tetiklediği çağrıyı almak için conditionCall(e) işlevini veya e$call ifadesini kullanın.

tryCatch(
  stop('file not found: data.csv'),
  error = function(e) {
    cat('Message:', conditionMessage(e), '\n')
    cat('Class  :', paste(class(e), collapse=', '), '\n')
  }
)

tryCatch() ve try() Karşılaştırması

R'de ayrıca daha basit olan try(expr) işlevi de vardır. Hata durumunda çalışmayı durdurmak yerine 'try-error' sınıfında bir nesne döndürür. Hızlı tek satırlık işlemler için try() kullanın; tam işleyici denetimine veya bir finally bloğuna ihtiyaç duyduğunuzda tryCatch() kullanın.

# try() returns try-error object on failure
result <- try(log('x'), silent = TRUE)
if (inherits(result, 'try-error')) {
  cat('try() caught error\n')
} else {
  cat('Result:', result, '\n')
}

tryCatch() Çağrılarını İç İçe Yerleştirme

tryCatch() çağrıları iç içe yerleştirilebilir. İçteki tryCatch() koşulları önce yakalar; koşulu yeniden fırlatırsa (stop(e) kullanarak), dıştaki işleyici yeniden fırlatılan koşulu yakalar.

outer_result <- tryCatch({
  tryCatch({
    stop('inner error')
  }, error = function(e) {
    cat('Inner handler, re-throwing\n')
    stop(paste('Wrapped:', e$message))
  })
}, error = function(e) {
  cat('Outer handler:', e$message, '\n')
  'recovered'
})
cat('Final:', outer_result, '\n')

Hızlı Kontrol

tryCatch() içinde, bir hata oluşup oluşmadığından bağımsız olarak hangi yan tümce her zaman çalışır?

tryCatch(): Önemli Noktalar

tryCatch() için önemli noktalar:

  • error = function(e) {...} ile hatalara, warning = function(w) {...} ile uyarılara araya girin
  • İşleyicinin dönüş değeri tryCatch() sonucuna dönüşür
  • finally her zaman çalışır; temizleme işlemleri için idealdir
  • Güvenilir olmayan girdiler üzerinde sağlam yineleme yapmak için döngü gövdelerini tryCatch() içine alın
  • e$message veya conditionMessage(e) hata metnini çıkarır
  • try(expr, silent=TRUE) daha basit bir tek satırlık alternatiftir
safe_op <- function(x) {
  tryCatch({
    if (!is.numeric(x)) stop('not numeric')
    sqrt(x)
  }, error = function(e) {
    cat('Error:', e$message, '\n')
    NA
  }, finally = {
    cat('Done processing', x, '\n')
  })
}
cat(safe_op(9), '\n')
cat(safe_op('a'), '\n')

Sıkça Sorulan Sorular

“Hata Kurtarma için tryCatch()” dersi ücretsiz mi?

Evet — “Hata Kurtarma için tryCatch()” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Hata Kurtarma için tryCatch()” dersinde ne öğreneceğim?

tryCatch() ile hataları, uyarıları ve iletileri yakalayıp işleyin. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Hata Kurtarma için tryCatch()” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. R'de Hatalar, Uyarılar ve İletiler
  2. Hata Kurtarma için tryCatch()
  3. withCallingHandlers() ve Yeniden Başlatmalar
  4. stop() ve warning() ile Sağlam İşlevler Yazma
← R Academy Sayfasına Dön