2015-01-12 5 views
8

यदि मैं पाइथन प्रोग्राम चलाता हूं, तो मैं सही ढंग से समझता हूं, पाइथन दुभाषिया बाइटकोड (.pyc फ़ाइल जो .py स्रोत के साथ दिखाई देता है) उत्पन्न करता है जब तक कि स्रोत में सिंटैक्स त्रुटि न हो।क्या पाइथन अपवाद (SyntaxError के अलावा) रनटाइम त्रुटियां हैं?

क्या बाइटकोड कंपाइलर कोई अन्य अपवाद उत्पन्न करता है या .pyc कोड निष्पादित किया जा रहा है जब रनटाइम पर उठाए गए सभी अन्य अपवाद हैं?

+2

'इंडेंटेशन एरर' भी है लेकिन यह आपके प्रश्न के लिए एक छोटा सा जोड़ा हो सकता है (क्योंकि यह प्रभावी रूप से एक वाक्यविन्यास त्रुटि भी है)। –

+0

पायथन 2.7 के लिए अंतर्निहित अपवादों की पूरी सूची [यहां] है [https://docs.python.org/2/library/exceptions।एचटीएमएल # अपवाद-पदानुक्रम)। वहां 'टैबरर' भी है जिसे मैं भूल गया था। मेरा मानना ​​है कि शेष रनटाइम त्रुटियां हैं लेकिन कुछ अस्पष्ट हैं कि मैं पूरी तरह से सुनिश्चित नहीं हूं कि वे सभी तरीकों से ट्रिगर हो सकते हैं। यदि मैं गलत हूं तो मैं किसी को पाइथन के अधिक कार्यान्वयन के बारे में और अधिक जानकारी देने दूंगा। –

+1

ध्यान दें कि 'SyntaxError' _can_ जैसी त्रुटियां भी रनटाइम पर उठाई जाएंगी। जैसे उदाहरण के लिए 'ast.parse'' सिंटेक्स त्रुटि 'बढ़ा सकता है। – mgilson

उत्तर

4

ठीक है, तकनीकी रूप सेraise <exception> के माध्यम से रनटाइम के दौरान उठाया जा सकता है। लेकिन मुझे लगता है कि आप इसे समझते हैं और पूछ रहे हैं कि क्या अपवाद उठाए जा सकते हैं जबकि पायथन आपके कोड (निष्पादन से पहले) का अर्थ देता है। वहाँ वास्तव में काफी कुछ कर रहे हैं:

  • SyntaxError: यह के रूप में यह कोड पढ़ता पार्सर द्वारा उठाया जाता है। यह असंतुलित कोष्ठक के रूप में अवैध वाक्य रचना का परिणाम है, आदि गलत जगह में एक कीवर्ड,

  • IndentationError का उपयोग कर: यह SyntaxError का एक उपवर्ग है और जब भी अपने कोड अनुचित खरोज है उठाया है। एक उदाहरण होगा:

    if condition: 
        line_indented_4_spaces 
        line_indented_3_spaces 
    
  • TabError: यह IndentationError का एक उपवर्ग है और जब आप असंगत एक स्रोत फ़ाइल में टैब और रिक्त स्थान मिश्रण उठाया जाता है।

  • SystemError: जब आंतरिक ऑपरेशन विफल हो जाता है तो यह दुभाषिया द्वारा उठाया जाता है। मुठभेड़ करने का आमतौर पर मतलब है कि आपकी पायथन स्थापना गड़बड़ हो गई है और उसे पुनः स्थापित करने की आवश्यकता हो सकती है।

  • MemoryError: यह SystemError जैसा है और जब कोई आंतरिक ऑपरेशन स्मृति की कमी के लिए विफल हो जाता है तब उठाया जा सकता है।

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

+0

'मेमोरी एरर' को रनटाइम पर भी उठाया जा सकता है, यहां तक ​​कि 'अस्थ' के साथ मजाकिया चीजें किए बिना या स्पष्ट रूप से इसे बढ़ाकर या उनमें से किसी भी अन्य छेड़छाड़ के बिना - यदि आप 'सूची' बनाने का प्रयास करते हैं जो आपके सिस्टम की स्मृति के लिए बहुत बड़ा है , उदाहरण के लिए। –

1

जब आप पाइथन कोड के साथ काम कर रहे हों तो आमतौर पर कोई संकलन चरण नहीं है, इसलिए मैं तर्क दूंगा कि पाइथन, सिंटैक्स इरर्स में सभी त्रुटियां शामिल हैं, रनटाइम त्रुटियां हैं।

उदाहरण के लिए, की सुविधा देता है इस फाइल को लिखें:

in xrange(5): 

स्पष्ट रूप से सिर्फ बकवास है कि (हम भी नाम देंगे यह nonsense.py), लेकिन दुभाषिया ऊपर आग करने देता है:

$ python 
>>> try: 
...  import nonsense 
... except SyntaxError: 
...  print("A syntax error occurred at runtime!") 
... 
A syntax error occurred at runtime! 
>>> 

तो वहां आपके पास है - एक सिंटेक्स त्रुटि को उठाया गया था और रनटाइम पर पकड़ा गया था, जो कम से कम मेरे दिमाग में इंगित करता है कि यह एक रनटाइम त्रुटि है।

+0

यह काम करता है क्योंकि आप * मॉड्यूल आयात कर रहे हैं * जो रनटाइम पर किया जाता है। आप एक फ़ाइल में 'सिंटेक्स त्रुटि' नहीं पकड़ सकते हैं जिसे आप सीधे चलाते हैं। साथ ही, आप एक दूषित पायथन इंस्टॉलेशन द्वारा उठाए गए 'SystemError' को नहीं पकड़ सकते हैं। कोड को निष्पादित करने से पहले अपवादों को मेरे उत्तर में सूचीबद्ध किया जा सकता है (रनटाइम से पहले)। – iCodez

+0

निश्चित रूप से। अपनी कोशिश/ब्लॉक को nonsense.py में ले जाएं, फिर कमांड लाइन से 'python।/Nonsense.py' निष्पादित करें। भले ही आप कोशिश के साथ लपेटें ... SyntaxError को छोड़कर यह पकड़ा नहीं जाएगा। –

संबंधित मुद्दे