पायथन में विभिन्न अपवाद प्रकारों से निपटने के दौरान कोड डुप्लिकेशन से बचने के लिए एक अच्छा पैटर्न क्या है, उदाहरण के लिए। मैं URLError के इलाज के लिए और HTTPError simlar लेकिन काफी नहीं चाहता:पायथन: अपवाद में कोड डुप्लिकेशन से कैसे बचें?
try:
page = urlopen(request)
except URLError, err:
logger.error("An error ocurred %s", err)
except HTTPError, err:
logger.error("An error occured %s", err)
logger.error("Error message: %s", err.read())
इस उदाहरण में, मैं पहली बार logger.error कॉल के दोहराव से बचने करना चाहते हैं। यह देखते हुए URLError HTTPError की मूल एक कुछ इस तरह कर सकता है:
except URLError, err:
logger.error("An error occurred %s", err)
try:
raise err
except HTTPError, err:
# specialization for http errors
logger.error("Error message: %s", err.read())
except:
pass
एक और दृष्टिकोण isinstance जैसे उपयोग करने के लिए किया जाएगा। यदि URLError और HTTPError विरासत की एक श्रृंखला में नहीं होगा:
except (URLError, HTTPError), err:
logger.error("An error occured %s", err)
if isinstance(err, HTTPError):
logger.error("Error message: %s", err.read())
एक कौन सा मैं पसंद करना चाहिए, वहाँ एक और बेहतर तरीका है?
धन्यवाद टिम! यह विश्वास है। बढ़िया आपने URLError, HTTPError को पहले उदाहरण में ऑर्डर करने के लिए देखा। मैं इस सवाल को संपादित नहीं करता क्योंकि यह स्पष्ट रूप से उस उदाहरण के साथ समस्या को इंगित करता है जैसा आपने अपने उत्तर में बताया था। – Bernhard