Monday 15 September 2014

python - Raise an exception from the caller's scope? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 4 जवाब

    मान लें कि मेरे पास निम्न स्क्रिप्ट है :

      def do_not_call_on_one (i): अगर मैं == 1: मान बढ़ाते हैं ("आप कभी नहीं सुनते हैं।") प्रिंट "सफलता!" उत्तेजना पर, आपको निम्न ट्रैसबैक दिखाई देगा:  
      ट्रेसबैक (सबसे हाल ही में कॉल अंतिम): फ़ाइल "test.py", लाइन 7, & lt; मॉड्यूल & gt; Do_not_call_on_one (1) फ़ाइल "test.py", पंक्ति 3, do_not_call_on_one में ValueError बढ़ाएं ("आप कभी नहीं सुने।") मान त्रुटि: आप कभी नहीं सुनते हैं   

    क्या कॉल स्टैक में हेरफेर करने का कोई तरीका है, जैसे कि त्रुटि उस पंक्ति से उत्पन्न होती है जो वास्तव में समस्या पैदा कर रही है, जैसे ?:

      ट्रैसबैक (सबसे हाल का कॉल अंतिम): फ़ाइल "test.py", पंक्ति 7, & lt; मॉड्यूल & gt; Do_not_call_on_one (1) मान त्रुटि: आप कभी नहीं सुनते हैं   

    इससे डेवलपर का समय बचा होगा जो अन्यथा कॉल स्टैक स्कैन करना गलत तरीके से इस्तेमाल किए जाने वाले फ़ंक्शन के लिए खोज करना बंद हो जाएगा, जब सही व्यवहार को समय से पहले परिभाषित किया जा सकता है

    क्या पायथन में कुछ भी है जो संशोधित ट्रेसबैक का उपयोग करने के लिए एक अपवाद की अनुमति देगा?

    अपडेट

    ऐसे buitins हैं जो इस कार्यक्षमता की नकल कर रहे हैं:

      # में test.py: int ('a') # 'अजगर test.py' पैदावार निष्पादित: ट्रैसबैक (सबसे हाल की कॉल अंतिम): फाइल "test.py", पंक्ति 1, & lt; मॉड्यूल & gt; Int ('a') ValueError: बेस 10: 'a'   

    नोट: के साथ int () के लिए अमान्य शब्दशः <पीछे

    शायद "हाँ", लेकिन मैं कल्पना नहीं कर सकता कि यह एक अच्छा विचार है।

    मुझे लगता है कि हम कोशिश कर सकते हैं, अगर हम कोशिश कर सकते हैं एक अलग स्थान से आने वाले एक अपवाद दिखाने के लिए कॉलस्टैक को नकली बनाते हैं। लेकिन मुझे नहीं लगता कि यह एक अच्छा विचार है।

    पहली जगह में, यह आम तौर पर समझा जाता है कि जो समारोह अपवाद उठाता है वह हमेशा गलती नहीं करता है। अगर किसी ने अनुबंध तोड़ दिया है और आपको एक ऐसा पैरामीटर दिया है जो आपको उम्मीद नहीं है, तो अपवाद उठाना ठीक है। यदि यह कॉलर के दायरे में अपवाद को बढ़ाकर आपके गधे को कवर करने का इरादा है तो कोई भी आपका कार्य दोष नहीं लगा सकता है, मुझे लगता है कि कोई व्यक्ति (शायद आप, स्वचालित परीक्षण के "दोष" सिस्टम) को फिर से सोचने की जरूरत है कि वह जिम्मेदारी कैसे निर्धारित करते हैं। / P>

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

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

    यह एक अच्छा विचार की तरह लग सकता है, लेकिन मुझे नहीं लगता कि यह है, और मुझे लगता है कि अगर आप किसी दूसरे के जूते आप समझ सकते हैं कि इस तरह से व्यवहार करने वाले किसी फ़ंक्शन का उपयोग करने के लिए अपने जीवन को कितना मुश्किल बना देगा।

No comments:

Post a Comment