2012-03-26 13 views
25

में एकाधिक अपवादों को एकत्रित करने और रिपोर्ट करने के लिए बेवकूफ तरीका पाइथन में एक बार में एकाधिक डेटा सत्यापन त्रुटियों को पकड़ने, लॉग करने और रिपोर्ट करने के लिए लोगों ने क्या उपयोग किया है?पाइथन

मैं पाइथन 3 में एक एप्लिकेशन बना रहा हूं जो पहले इनपुट डेटा को मान्य करता है और फिर इसे संसाधित करता है। पहले चरण में रिपोर्टिंग त्रुटियां प्रोग्राम की इच्छित कार्यक्षमता का हिस्सा हैं, इसलिए मैं नहीं चाहता कि मेरा सत्यापनकर्ता पहले अपवाद पर छोड़ दें। विशेष रूप से, डेटा टैब्यूलर होता है और मैं वापस लौटने में सक्षम होना चाहता हूं - बढ़ाने के बजाए - तालिका की प्रत्येक पंक्ति के लिए अपवाद जो मान्य नहीं है।

एक forum discussion from a couple of years ago निम्नलिखित, जो मेरे लिए साफ लगता है सहित कई समाधान, चिंतन:

errors = [] 
for item in data: 
    try: 
     process(item) 
    except ValidationError as e: 
     errors.append(e) 
if errors: 
    raise MultipleValidationErrors(errors) 

जहां MultipleValidationErrors वर्ग एक उपयुक्त __str__ यह सभी ValidationErrors बारे में उपयोगी जानकारी सूचीबद्ध करने के लिए विधि होगा।

अन्य traceback मॉड्यूल का उपयोग करने की सलाह देते हैं, लेकिन चूंकि अपवाद जिन्हें मैं पकड़ना चाहता हूं, वे प्रोग्राम त्रुटियों के बजाय डेटा सत्यापन त्रुटियां हैं, जो अनुचित लगता है। logging मॉड्यूल प्राप्त करना उचित हो सकता है, यद्यपि।

+1

शायद [यह सवाल] (http://stackoverflow.com/questions/6470428/catch-multiple-exceptions-in-one-line-except-block) – inspectorG4dget

+3

@ इंस्पेक्टर G4dget में मदद करेगा: यह प्रश्न एकाधिक प्रकारों को पकड़ने के बारे में है अपवादों का; यह एक ही अपवाद प्रकार के कई उदाहरणों को पकड़ने के बारे में है। –

+0

आपके द्वारा सूचीबद्ध कोड काम करेगा, अगर आप जो चाहते हैं वह करता है, या आप उल्लेख करते हैं कि आप अधिक जानकारी प्रदान करने के लिए ट्रेसबैक मॉड्यूल का उपयोग कर सकते हैं। वैकल्पिक रूप से आप अपवाद ऑब्जेक्ट को बाद में उपयोग के लिए डेटा संरचना में सहेज सकते हैं, या कई अन्य चीजें कर सकते हैं। यह सब इस बात पर निर्भर करता है कि अपवादों का जवाब देने के लिए आपकी आवश्यकताओं क्या हैं, जो आपके प्रश्न से स्पष्ट नहीं हैं। –

उत्तर

6

मैंने सी ++ और पायथन दोनों में इस मुहावरे का उपयोग किया है। यह एक साफ़ संदेश है जो मुझे पता है कि जब आप चाहते हैं कि एक लॉग संदेश के बजाय अपवाद है। इसका नकारात्मक पक्ष यह है कि संयुक्त अपवाद सामान्य रूप से रैखिक स्थान लेता है, जो कई त्रुटियों वाले बड़े डेटासेट को संसाधित करते समय समस्याग्रस्त हो सकता है।

+4

स्टैंडअलोन पढ़ने पर यह उत्तर इसके संदर्भ को याद नहीं कर रहा है। मुझे नहीं पता कि आप किस मुहावरे का जिक्र कर रहे हैं। – ThorSummoner

+1

@ThorSummoner मुझे लगता है कि लार्समैन इस बात का जिक्र कर रहा है कि ओपी सूची में विभिन्न अपवाद कैसे एकत्र करता है, और उसके बाद सूची में एक अपवाद उठाता है। – Pedro