Exceptions को फिर से फेंकना और Exception Chaining
Exceptions को चुनिंदा रूप से फिर से फेंकें और cause chaining के साथ निचले स्तर की errors को लपेटें।
Exceptions को फिर से फेंकना और Exception Chaining, CoddyKit पर Kotlin Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Kotlin Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फिर से फेंकना और लपेटना
कभी-कभी आप किसी अपवाद को केवल लॉग करने, लपेटने या रूपांतरित करने के लिए पकड़ते हैं, फिर किसी अधिक विशिष्ट अपवाद को आगे बढ़ने देते हैं। Kotlin में यह एक सहज शैली है।
सीधे फिर से फेंकना
फिर से फेंकने के लिए बस throw e दोबारा लिखें — प्रसार अगले हैंडलर तक जारी रहता है।
fun main() {
try {
try { "x".toInt() }
catch (e: NumberFormatException) {
println("logging: ${e.message}")
throw e // re-throw original
}
} catch (e: NumberFormatException) {
println("outer caught: ${e.message}")
}
}कस्टम अपवाद से लपेटना
श्रृंखला को सुरक्षित रखने के लिए नया अपवाद बनाते समय मूल अपवाद को cause के रूप में पास करें।
class ParseException(msg: String, cause: Throwable) : RuntimeException(msg, cause)
fun main() {
try {
try { "xyz".toInt() }
catch (e: NumberFormatException) {
throw ParseException("could not parse user input", e)
}
} catch (e: ParseException) {
println("got: ${e.message}")
println("cause: ${e.cause?.message}")
}
}कारणों की शृंखला का निरीक्षण
cause प्रॉपर्टी पिछले अपवाद से जुड़ी होती है। पूरी मूल त्रुटि प्रिंट करने के लिए इस शृंखला में आगे बढ़ें।
fun main() {
val e = RuntimeException("top",
RuntimeException("middle",
RuntimeException("root")))
var current: Throwable? = e
while (current != null) {
println(current.message)
current = current.cause
}
}चयनात्मक रूप से फिर से फेंकना
व्यापक प्रकार को पकड़ें, फिर यदि वह आपके अपेक्षित मामले से मेल नहीं खाता है तो उसे फिर से फेंकें।
fun parseRequired(s: String): Int {
try {
return s.toInt()
} catch (e: NumberFormatException) {
if (s.isBlank()) return 0
throw e // unexpected — let it propagate
}
}
fun main() {
println(parseRequired("42"))
println(parseRequired(""))
// parseRequired("abc") // throws
}संदर्भ जोड़ना
ऐसा संदर्भ जोड़ने के लिए डोमेन अपवाद में लपेटें जो मूल अपवाद में नहीं था (इनपुट, अनुरोध आईडी आदि)।
class UploadError(msg: String, cause: Throwable) : RuntimeException(msg, cause)
fun upload(file: String) {
try { throw RuntimeException("disk full") }
catch (e: Throwable) { throw UploadError("uploading $file failed", e) }
}
fun main() {
try { upload("photo.jpg") }
catch (e: UploadError) { println("${e.message} <- ${e.cause?.message}") }
}स्टैक ट्रेस न खोएँ
लपेटते समय हमेशा मूल अपवाद को cause के रूप में पास करें — समान संदेश वाला नया अपवाद बिना कारण के कभी न बनाएँ। स्टैक ट्रेस आपके डिबगिंग का जीवन-आधार है।
class Wrapped(m: String, cause: Throwable) : RuntimeException(m, cause)
fun main() {
try {
try { error("inner") }
catch (e: Throwable) { throw Wrapped("outer", e) }
} catch (e: Wrapped) {
println("message: ${e.message}")
println("cause: ${e.cause?.message}")
}
}बिना लपेटे फिर से फेंकना
यदि आपको केवल लॉगिंग करनी है, तो लॉग कॉल के बाद बस throw e लिखें — लपेटने की आवश्यकता नहीं है।
fun risky() {
try { throw IllegalStateException("oops") }
catch (e: IllegalStateException) {
println("Logging before rethrow: ${e.message}")
throw e
}
}
fun main() {
try { risky() }
catch (e: IllegalStateException) { println("outer: ${e.message}") }
}फिर से फेंकते समय साफ़-सफ़ाई के लिए finally
फिर से फेंकने पर भी संसाधनों की साफ़-सफ़ाई करने के लिए finally का उपयोग करें।
fun process() {
try {
throw RuntimeException("failure")
} finally {
println("cleanup ran")
}
}
fun main() {
try { process() }
catch (e: RuntimeException) { println("caught: ${e.message}") }
}दबाए गए अपवाद
यदि finally स्वयं अपवाद फेंकता है, तो मूल अपवाद डिफ़ॉल्ट रूप से दब जाता है। दोनों को सुरक्षित रखने के लिए addSuppressed का उपयोग करें।
fun main() {
val primary = RuntimeException("primary")
val secondary = RuntimeException("from cleanup")
primary.addSuppressed(secondary)
println(primary.suppressed.joinToString { it.message ?: "?" })
}एंटी-पैटर्न: अपवाद छिपाकर अलग अपवाद फेंकना
एक अपवाद को पकड़कर उससे असंबंधित नया अपवाद फेंकना (बिना कारण के) डीबग करने की जानकारी नष्ट कर देता है। हमेशा cause पास करें।
// BAD
// catch (e: IOException) { throw RuntimeException("error") }
// GOOD
// catch (e: IOException) { throw RuntimeException("error reading config", e) }
fun main() { println("Pass cause when re-throwing!") }त्वरित जाँच
जब आप किसी अपवाद को नए अपवाद में लपेटते हैं, तो मूल स्टैक ट्रेस सुरक्षित रखने के लिए आपको क्या करना चाहिए?
पुनरावलोकन
दोबारा फेंकने के लिए: throw e। लपेटने के लिए: cause = e के साथ नया अपवाद फेंकें। कारणों की श्रृंखला हमेशा सुरक्षित रखें — बिना कारण वाला आवरण कभी न बनाएँ। सफ़ाई के लिए finally का उपयोग करें और जब सफ़ाई स्वयं विफल हो जाए, तो addSuppressed का उपयोग करें।
एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “Exceptions को फिर से फेंकना और Exception Chaining” पाठ निःशुल्क है?
हाँ — Kotlin Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Exceptions को फिर से फेंकना और Exception Chaining” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Kotlin Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Exceptions को फिर से फेंकना और Exception Chaining” में मैं क्या सीखूँगा?
Exceptions को चुनिंदा रूप से फिर से फेंकें और cause chaining के साथ निचले स्तर की errors को लपेटें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Kotlin Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Kotlin Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Kotlin Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Exceptions को फिर से फेंकना और Exception Chaining” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Kotlin Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Kotlin Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Expression के रूप में try/catch/finally
- कस्टम Exception Classes बनाना
- runCatching और Result
- Exceptions को फिर से फेंकना और Exception Chaining