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 finallyher 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$messageveyaconditionMessage(e)hata metnini çıkarırtry(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
- R'de Hatalar, Uyarılar ve İletiler
- Hata Kurtarma için tryCatch()
- withCallingHandlers() ve Yeniden Başlatmalar
- stop() ve warning() ile Sağlam İşlevler Yazma