मैंने अन्य पोस्ट की खोज की है, क्योंकि मुझे लगा कि यह एक आम समस्या है, लेकिन मुझे मिले अन्य सभी पायथन अपवाद प्रश्नों ने मेरी समस्या को प्रतिबिंबित नहीं किया है।पायथन में अपवादों को संभालने का सही तरीका?
मैं जितना संभव हो उतना विशिष्ट होने की कोशिश करूंगा, इसलिए मैं एक प्रत्यक्ष उदाहरण दूंगा। और pleeeeease इस विशिष्ट समस्या के लिए कोई कामकाज पोस्ट नहीं करते हैं। मुझे विशेष रूप से दिलचस्पी नहीं है कि आप xyz के साथ एक ईमेल कितना अच्छा भेज सकते हैं। मैं जानना चाहता हूं कि आप आम तौर पर निर्भर, त्रुटि प्रवण बयान से कैसे निपटते हैं।
मेरा सवाल यह है कि, एक दूसरे पर निर्भर होने वाले अपवादों को अच्छी तरह से कैसे संभालना है, जिसका अर्थ है: केवल पहला चरण सफल होने पर, अगला प्रयास करें, और इसी तरह। एक और मानदंड है: सभी अपवादों को पकड़ा जाना है, यह कोड मजबूत होना चाहिए।
आपके विचार के लिए, एक उदाहरण:
try:
server = smtplib.SMTP(host) #can throw an exception
except smtplib.socket.gaierror:
#actually it can throw a lot more, this is just an example
pass
else: #only if no exception was thrown we may continue
try:
server.login(username, password)
except SMTPAuthenticationError:
pass # do some stuff here
finally:
#we can only run this when the first try...except was successful
#else this throws an exception itself!
server.quit()
else:
try:
# this is already the 3rd nested try...except
# for such a simple procedure! horrible
server.sendmail(addr, [to], msg.as_string())
return True
except Exception:
return False
finally:
server.quit()
return False
यह मेरे लिए अत्यंत unpythonic लग रहा है, और कोड से निपटने त्रुटि ट्रिपल वास्तविक व्यापार कोड है, लेकिन दूसरी ओर मैं कई बयान हैं कि कैसे संभाल कर सकते हैं एक दूसरे पर निर्भर, अर्थात् कथन 1 कथन 2 के लिए पूर्व शर्त है और इसी तरह?
मुझे उचित संसाधन सफाई में भी रूचि है, यहां तक कि पायथन भी इसे अपने लिए प्रबंधित कर सकता है।
धन्यवाद, टॉम
डीबीआर संपादित करने के लिए धन्यवाद, लेकिन कृपया उन चीज़ों को संपादित न करें जिन्हें आप अपने बारे में निश्चित नहीं हैं। मैंने मानदंड के मानदंडों को संपादित किया है, जो वास्तव में एकवचन है, क्योंकि बहुवचन को यह समझ में नहीं आता है कि आपने इसे संपादित किया है। – Tom
ओप, इसके बारे में खेद है (एचएम, मुझे नहीं लगता कि मैंने कभी पहले मानदंडों का एकवचन सुना है ..) – dbr