मैंने जिस परियोजना पर काम कर रहा हूं उसके साथ मैंने खुद को एक छेद में खोला है। मुझे यह विशाल परियोजना मिली है (हजारों लाइनों में से 100), और हर जगह MySQL त्रुटियां हैं। मैं अब उन्हें साफ करने की प्रक्रिया में हूं।निष्पादन को रोकने के बिना अपवाद फेंक दें?
मुझे यह डेटाबेस क्लास मिला है जो सभी प्रश्नों के माध्यम से गुजरता है, इसलिए जब भी कोई SQL त्रुटि होती है, तो मैंने अपवाद फेंक दिया है। समस्या यह है कि मेरे पास निष्पादन रोक नहीं है। इसे हमेशा जारी रखना होगा, और बस अपवाद लॉग इन करें ताकि मैं उन्हें ट्रैक कर सकूं और उन्हें एक समय में ठीक कर सकूं।
मुझे उम्मीद थी कि set_exception_handler
मैं जो चाहता हूं वह करूंगा, लेकिन दस्तावेज़ विशेष रूप से कहते हैं कि यह मेरे हैंडलर को कॉल करने के बाद निष्पादन को रोक देगा। तो मैं इस के आसपास कैसे हो सकता है?
अपवाद वर्तमान फ़ंक्शन को रोक सकता है, लेकिन फिर मैं इसे फ़ंक्शन से बाहर निकलना चाहता हूं, शायद शून्य या झूठी लौट रहा हूं, और फिर सामान्य के रूप में जारी रहता हूं, लेकिन मुझे इसे अपने वैश्विक अपवाद हैंडलर को कॉल करने की आवश्यकता है।
स्पष्ट करने के लिए:
मैं एक अपवाद (जब भी वहाँ एक एसक्यूएल त्रुटि है) मेरी डेटाबेस वर्ग से फेंक करना चाहते हैं। मैं तब इस त्रुटि को लॉग करना चाहता हूं और/या स्क्रीन पर एक संदेश प्रदर्शित करना चाहता हूं जब तक कि मैं या तो SQL त्रुटि को ठीक नहीं कर सकता, या कोशिश/पकड़ में अपमानजनक रेखा को लपेटूं। मैं नहीं चाहता कि यह निष्पादन रोकें। अगर मैं अपवाद फेंकने के बजाय बस कुछ error_handler()
फ़ंक्शन को कॉल करता हूं, तो मैं इसे पकड़ नहीं सकता। अगर मैं इसे तुरंत पकड़ता हूं (डीबी कक्षा के भीतर भी), तो मैं इसे ढेर से आगे नहीं पकड़ सकता (जब तक कि मैं इसे फिर से फेंक नहीं देता, लेकिन फिर हम निष्पादन को रोकने के लिए वापस आ जाते हैं)।
आप पहले से ही कर दिया है तो
और फिर है कि एक ही अपवाद संचालक अभी भी सभी अन्य अपवाद है कि वास्तव में फेंक दिया जाता है को पकड़ने के लिए इस्तेमाल किया जा सकता अपवादों में MySQL त्रुटियों का अनुवाद करने के लिए कोड को अपडेट किया गया है क्यों अपवाद फेंकने के बजाय त्रुटि को लॉग न करें? – pgraham
@pg ग्राहम: इसे हटाएं ... यह एक अच्छा सवाल है। इसका कारण यह है कि अगर मैं वैश्विक अपवाद हैंडलर में नहीं आना चाहता था तो मैं अपवाद को पकड़ने में सक्षम होना चाहता था। इसके अलावा, मैं एक केंद्रीकृत अपवाद हैंडलिंग और लॉगिंग फ़ंक्शन चाहता हूं। आखिरकार, जब मैं त्रुटियों को साफ़ करता हूं, तो मैं वैश्विक अपवाद हैंडलर को थोड़ा संशोधित करना चाहता हूं ताकि वास्तव में * मर जाए और घातक त्रुटि डालें। – mpen
@downvoter: यह समझाने की देखभाल क्यों यह एक बुरा सवाल है? – mpen