मैं एक लाइन में (ब्लॉक को छोड़कर) कई अपवादों को कैसे पकड़ सकता हूं
यह करो:
try:
may_raise_specific_errors():
except (SpecificErrorOne, SpecificErrorTwo) as error:
handle(error) # might log or have some other default behavior...
पुराने सिंटैक्स के कारण कोष्ठक की आवश्यकता होती है जो त्रुटि ऑब्जेक्ट को किसी नाम पर असाइन करने के लिए अल्पविराम का उपयोग करता है। as
कीवर्ड कार्य के लिए प्रयोग किया जाता है। आप त्रुटि ऑब्जेक्ट के लिए किसी भी नाम का उपयोग कर सकते हैं, मैं error
व्यक्तिगत रूप से पसंद करता हूं ।
सर्वश्रेष्ठ प्रणालियां
वर्तमान में इस तरीके से करने और पायथन के साथ संगत को आगे बढ़ाने के लिए, आपको अपवाद को कॉमा के साथ अलग करने और उन्हें कोष्ठक के साथ लपेटने की आवश्यकता है ताकि पहले के वाक्य रचना से अलग किया जा सके, अपवाद अपवाद नाम को अपवाद प्रकार निर्दिष्ट करके असाइन किया जा सकता है जिसे पकड़ा जा सकता है। अल्पविराम।
यहाँ सरल उपयोग का एक उदाहरण दिया गया है:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError): # the parens are necessary
sys.exit(0)
मैं बग को छिपाने से बचने के लिए केवल इन अपवादों को निर्दिष्ट कर रहा हूं, जो कि अगर मैं मुठभेड़ करता हूं तो मुझे पूर्ण स्टैक ट्रेस की अपेक्षा है।
यह यहाँ प्रलेखित है: https://docs.python.org/tutorial/errors.html
आप एक चर के अपवाद को निर्दिष्ट कर सकते हैं, ( e
यह आम है, लेकिन आप अधिक वर्बोज़ चर पसंद कर सकते हैं यदि आपके पास लंबे अपवाद को संभालने या आपका आईडीई केवल उस से बड़ा चयन को हाइलाइट करता है, जैसा कि मेरा है।) उदाहरण में एक args विशेषता है। यहाँ एक उदाहरण है:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError) as err:
print(err)
print(err.args)
sys.exit(0)
ध्यान दें कि पायथन 3 err
में except
ब्लॉक खत्म होने पर ऑब्जेक्ट स्कोप से बाहर हो जाता है।
पदावनत
आप कोड देख सकते हैं जो अल्पविराम के साथ त्रुटि प्रदान करता है। यह उपयोग, केवल Python 2.5 और पूर्व में उपलब्ध प्रपत्र, पदावनत है, और यदि आप चाहते हैं कि आपका कोड Python 3 में संगत हो, तो आपको नए फ़ॉर्म का उपयोग करने के लिए सिंटैक्स अपडेट करना चाहिए:
import sys
try:
mainstuff()
except (KeyboardInterrupt, EOFError), err: # don't do this in Python 2.6+
print err
print err.args
sys.exit(0)
यदि आप अपने कोडबेस में अल्पविराम नाम असाइनमेंट देखते हैं, और आप 2.5 या उच्चतर पायथन का उपयोग कर रहे हैं, तो इसे करने के नए तरीके पर स्विच करें ताकि अपग्रेड करते समय आपका कोड संगत बना रहे।
suppress
संदर्भ प्रबंधक
स्वीकृत उत्तर वास्तव में कोड की 4 लाइनें हैं, न्यूनतम:
try:
do_something()
except (IDontLikeYouException, YouAreBeingMeanException) as e:
pass
try
, except
, pass
लाइनों के साथ एक पंक्ति में संभाला जा सकता है दबाने संदर्भ प्रबंधक, अजगर 3.4 में उपलब्ध :
from contextlib import suppress
with suppress(IDontLikeYouException, YouAreBeingMeanException):
do_something()
इसलिए जब आप pass
कुछ अपवादों पर चाहते हैं, तो उपयोग करें suppress
।