exception - SyntaxError inconsistency in Python? -


इन दो स्निपेटों पर विचार करें:

  प्रयास करें: a + a = सिवाय सिंटैक्स त्रुटि: प्रिंट "पहले अपवाद पकड़ा गया"  

। Try: eval ("a + a = a") सिंटैक्स त्रुटि को छोड़कर: प्रिंट "दूसरा अपवाद पकड़ा गया"

दूसरे मामले में "दूसरा अपवाद .." कथन मुद्रित किया जाता है (अपवाद पकड़ा गया), जबकि पहले में नहीं है।

क्या दूसरा कोई दूसरा ("सिंटैक्स एरर 2") से अलग है (इसे "सिंटेक्स एरर 1" कहते हैं)?

क्या कोई भी तरीका है सिंटैक्स एरर 1 को पकड़ने (इस प्रकार संकलन-समय की त्रुटियों को रोकना )? eval में कोड के बड़े ब्लॉकों को लपेटना असंतोषजनक है;)

पहले में मामला, अपवाद को संकलक द्वारा उठाया जाता है, जो इससे पहले कोशिश / छोड़कर संरचना भी मौजूद है (क्योंकि यह संकलक स्वयं ही होगा इसे पार्सिंग के ठीक ऊपर सेट करें)। दूसरे मामले में, कंपाइलर दो बार चल रहा है- और अपवाद तब उठाया जा रहा है जब कंपाइलर eval के भाग के रूप में चलाता है, बाद कंपाइलर का पहला रन पहले से ही है try / except सेट अप करें।

तो, वाक्यविन्यास त्रुटियों को एक तरफ या किसी अन्य के बीच में रखने के लिए आपको संकलक को दो बार चलाने की व्यवस्था करनी होगी - eval < / Code> एक तरीका है, स्पष्ट संकलित करें अंतर्निहित फ़ंक्शन कॉल्स दूसरे, import काफी आसान है (कोड को दूसरी फ़ाइल में लिखने के बाद), exec और execfile अन्य संभावनाएं अभी तक लेकिन यद्यपि आप ऐसा करते हैं, सिंटैक्स त्रुटियों को पकड़ा जा सकता है क्योंकि कंपाइलर ने आपको को छोड़कर / छोड़कर ब्लॉक की जरूरत के लिए एक बार पहली बार चलाया है!


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

php - Multiple Select with Explode: only returns the word "Array" -

php - jQuery AJAX Post not working -