मेरे पास कई फ़ंक्शन हैं जो फ़ाइलों से डेटा पार्स करते हैं, आमतौर पर परिणामों की एक सूची लौटाते हैं।मैं एक मूल्य वापस करना चाहता हूं और अपवाद बढ़ा सकता हूं, इसका मतलब है कि मैं कुछ गलत कर रहा हूं?
यदि मुझे फ़ाइल में एक डोडी लाइन मिलती है, तो मैं वैध लाइनों पर सिपाही और प्रक्रिया करना चाहता हूं, और उन्हें वापस कराना चाहता हूं। लेकिन मैं कॉलिंग फ़ंक्शन में त्रुटि की रिपोर्ट भी करना चाहता हूं। कारण मैं इसकी रिपोर्ट करना चाहता हूं ताकि कॉलिंग फ़ंक्शन उपयोगकर्ता को सूचित कर सके कि फ़ाइल को देखने की आवश्यकता है। मैं पार्स फ़ंक्शन में जीयूआई चीजें करना शुरू नहीं करना चाहता, क्योंकि यह चिंताओं को अलग करने का एक बड़ा उल्लंघन प्रतीत होता है। पार्स फ़ंक्शन में कंसोल तक पहुंच नहीं है, मैं वैसे भी त्रुटि संदेशों को लिख रहा हूं।
यह मुझे सफल डेटा वापस करने के लिए छोड़ देता है, लेकिन त्रुटि के कारण अपवाद भी उठाता है, जो स्पष्ट रूप से मैं नहीं कर सकता।
इस कोड पर विचार करें:
try:
parseResult = parse(myFile)
except MyErrorClass, e:
HandleErrorsSomehow(str(e))
def parse(file): #file is a list of lines from an actual file
err = False
result = []
for lines in file:
processedLine = Process(line)
if not processedLine:
err = True
else
result.append(processedLine)
return result
if err:
raise MyErrorClass("Something went wrong")
जाहिर है पिछले तीन लाइनों कोई अर्थ नहीं है, लेकिन मैं यह करने के लिए एक अच्छा तरीका को समझ नहीं सकता। मुझे लगता है मैं return (err, result)
कर सकता है, और यह
parseErr, parseResult = parse(file)
if parseErr:
HandleErrorsSomehow()
लेकिन लौटने त्रुटि कोड पर्याप्त अन-pythonic लगता है कहते हैं, अकेले त्रुटि कोड और वास्तविक परिणाम मूल्यों की tuples लौटने।
तथ्य यह है कि मुझे लगता है कि मैं ऐसा कुछ अजीब ऐसा करना चाहता हूं जो वास्तव में बहुत जटिल नहीं होना चाहिए, मुझे यह सोच रहा है कि मैं शायद कुछ गलत कर रहा हूं। क्या इस समस्या का कोई बेहतर समाधान है? या क्या कोई तरीका है कि मैं एक मूल्य वापस करने और एक ही समय में अपवाद बढ़ाने के लिए finally
का उपयोग कर सकता हूं?
इस मामले में, यदि कोई त्रुटि नहीं हुई है, तो मैं शायद 'त्रुटि सूचना' के साथ एक त्रुटि स्ट्रिंग होने के साथ एक tuple 'processedData, errorInformation' वापस कर दूंगा। एक और विकल्प कॉलबैक फ़ंक्शन का उपयोग करना होगा, अगर कोई त्रुटि होती है तो कुछ त्रुटि जानकारी के साथ बुलाया जाता है - यदि कॉलर परवाह नहीं है, तो यह कॉलबैक के रूप में 'कोई नहीं' पास कर सकता है। –