खोज…


पैरामीटर

पैरामीटर विवरण
expr यदि " tryCatch पार्ट" सफलतापूर्वक पूरा हो गया, तो tryCatch अंतिम मूल्यांकित अभिव्यक्ति लौटाएगा। इसलिए, जब सब कुछ ठीक हो जाता है, तो वास्तविक मूल्य लौटाया जाता है और कोई शर्त नहीं होती है (यानी चेतावनी या त्रुटि ) readLines का रिटर्न मान readLines । ध्यान दें कि आपको "वैल्यू पार्ट" में कोड के रूप में return माध्यम से रिटर्न वैल्यू की खोज करने की आवश्यकता नहीं है, एक फंक्शन एनवायरमेंट को कवर नहीं किया गया है (इसके विपरीत चेतावनी और त्रुटि के लिए कंडीशन हैंडलर के लिए)
चेतावनी / त्रुटि / आदि उन सभी स्थितियों के लिए एक हैंडलर फ़ंक्शन प्रदान / परिभाषित करें जिन्हें आप स्पष्ट रूप से संभालना चाहते हैं। AFAIU, आप किसी भी प्रकार की परिस्थितियों के लिए हैंडलर प्रदान कर सकते हैं (न केवल चेतावनियाँ और त्रुटियां , बल्कि कस्टम स्थितियाँ; उस के लिए simpleCondition स्थिति और मित्र देखें) जब तक संबंधित हैंडलर फ़ंक्शन का नाम संबंधित स्थिति के वर्ग से मेल खाता है (देखें) के लिए दस्तावेज़ का विवरण हिस्सा tryCatch )।
आखिरकार यहां सब कुछ चला जाता है जिसे बहुत अंत में निष्पादित किया जाना चाहिए, भले ही "ट्राइ पार्ट" में अभिव्यक्ति सफल हुई हो या यदि कोई शर्त थी। यदि आप एक से अधिक अभिव्यक्ति निष्पादित करना चाहते हैं, तो आपको उन्हें घुंघराले कोष्ठक में लपेटने की आवश्यकता है, अन्यथा आप बस finally = <expression> लिख सकते थे finally = <expression> (यानी "कोशिश भाग" के रूप में एक ही तर्क)।

टिप्पणियों

tryCatch

tryCatch मूल्य को क्रियान्वित करने के लिए जुड़े रिटर्न expr एक चेतावनी या एक त्रुटि: जब तक कि वहाँ एक शर्त है। यदि यह मामला है, तो विशिष्ट रिटर्न मान (उदाहरण के लिए return(NA) ऊपर) संबंधित स्थितियों के लिए हैंडलर फ़ंक्शन की आपूर्ति करके निर्दिष्ट किया जा सकता है (तर्कों और warning error देखें ?tryCatch )। ये ऐसे कार्य हो सकते हैं जो पहले से मौजूद हैं, लेकिन आप उन्हें tryCatch भीतर भी परिभाषित कर सकते हैं (जैसा कि हमने ऊपर किया था)।

हैंडलर फ़ंक्शंस के विशिष्ट रिटर्न वैल्यू चुनने के निहितार्थ

जैसा कि हमने निर्दिष्ट किया है कि "प्रयास भाग" में त्रुटि के मामले में NA को लौटा दिया जाना चाहिए, y में तीसरा तत्व NA । अगर हमने NULL को रिटर्न वैल्यू के लिए चुना है, तो y की लंबाई 3 बजाय 2 होगी क्योंकि lapply बस NULL रिटर्न मानों को "अनदेखा / ड्रॉप" करेगा। यह भी ध्यान दें कि यदि आप रिटर्न के माध्यम से एक स्पष्ट वापसी मूल्य निर्दिष्ट नहीं करते return , तो हैंडलर फ़ंक्शन NULL (यानी किसी त्रुटि या चेतावनी की स्थिति में) वापस आ जाएगा।

"अनसेस्ड" चेतावनी संदेश

जब हमारे urls वेक्टर का तीसरा तत्व हमारे फ़ंक्शन को हिट करता है, तो हमें इस तथ्य के अलावा निम्नलिखित चेतावनी मिलती है कि ( readLines सबसे पहले शिकायत करती है कि यह वास्तव में एक त्रुटि के साथ विफल होने से पहले चेतावनी के माध्यम से कनेक्शन नहीं खोल सकती है ):

Warning message:
    In file(con, "r") : cannot open file 'I'm no URL': No such file or directory

एक चेतावनी पर "जीत" एक त्रुटि है , इसलिए हम वास्तव में इस विशेष मामले में चेतावनी में दिलचस्पी नहीं रखते हैं। इस प्रकार हमने readLines में warn = FALSE निर्धारित किया है, लेकिन इसका कोई प्रभाव नहीं पड़ता है। चेतावनी को दबाने का एक वैकल्पिक तरीका उपयोग करना है

suppressWarnings(readLines(con = url))

के बजाय

readLines(con = url, warn = FALSE)

TryCatch का उपयोग करना ()

हम एक फ़ंक्शन के एक मजबूत संस्करण को परिभाषित कर रहे हैं जो किसी दिए गए URL से HTML कोड पढ़ता है। इस अर्थ में मजबूत है कि हम यह चाहते हैं कि हम ऐसी स्थितियों को संभालें, जहां या तो कुछ गलत हो जाए (त्रुटि) या बिल्कुल नहीं जिस तरह से हमने इसे (चेतावनी) की योजना बनाई है। त्रुटियों और चेतावनियों के लिए छाता शब्द शर्त है

tryCatch का उपयोग करके फ़ंक्शन की परिभाषा

readUrl <- function(url) {
    out <- tryCatch(

        ########################################################
        # Try part: define the expression(s) you want to "try" #
        ########################################################

        {
            # Just to highlight: 
            # If you want to use more than one R expression in the "try part" 
            # then you'll have to use curly brackets. 
            # Otherwise, just write the single expression you want to try and 

            message("This is the 'try' part")
            readLines(con = url, warn = FALSE) 
        },

        ########################################################################
        # Condition handler part: define how you want conditions to be handled #
        ########################################################################

        # Handler when a warning occurs:
        warning = function(cond) {
            message(paste("Reading the URL caused a warning:", url))
            message("Here's the original warning message:")
            message(cond)

            # Choose a return value when such a type of condition occurs
            return(NULL)
        },

        # Handler when an error occurs:
        error = function(cond) {
            message(paste("This seems to be an invalid URL:", url))
            message("Here's the original error message:")
            message(cond)

            # Choose a return value when such a type of condition occurs
            return(NA)
        },

        ###############################################
        # Final part: define what should happen AFTER #
        # everything has been tried and/or handled    #
        ###############################################

        finally = {
            message(paste("Processed URL:", url))
            message("Some message at the end\n")
        }
    )    
    return(out)
}

चीजों को परखना

आइए उन URL के वेक्टर को परिभाषित करें जहां एक तत्व एक मान्य URL नहीं है

urls <- c(
    "http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html",
    "http://en.wikipedia.org/wiki/Xz",
    "I'm no URL"
)

और इसे उपरोक्त फ़ंक्शन के इनपुट के रूप में पास करें

y <- lapply(urls, readUrl)
# Processed URL: http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html
# Some message at the end
#
# Processed URL: http://en.wikipedia.org/wiki/Xz
# Some message at the end
#
# URL does not seem to exist: I'm no URL 
# Here's the original error message:
# cannot open the connection
# Processed URL: I'm no URL
# Some message at the end
#
# Warning message:
# In file(con, "r") : cannot open file 'I'm no URL': No such file or directory

आउटपुट की जांच

length(y)
# [1] 3

head(y[[1]])
# [1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"      
# [2] "<html><head><title>R: Functions to Manipulate Connections</title>"      
# [3] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
# [4] "<link rel=\"stylesheet\" type=\"text/css\" href=\"R.css\">"             
# [5] "</head><body>"                                                          
# [6] ""    

y[[3]]
# [1] NA


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow