2017-08-09 9 views
7

क्यों निम्नलिखित प्रोग्राम में IndentationErrorSyntaxError के बजाय उठाया जा रहा है?SyntaxError की बजाय यहां इंडेंटेशन त्रुटि क्यों उठाई जा रही है?

>>> if True: 
... print "just right!" 
    File "<stdin>", line 2 
    print "just right!" 
     ^
IndentationError: Missing parentheses in call to 'print' 

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

यह मेरी समझ है कि print का उपयोग करते समय लापता ब्रांड्स को SyntaxError माना गया था, IndentationError नहीं।

“SyntaxError: Missing parentheses in call to 'print'” is a new error message that was added in Python 3.4.2 primarily to help users that are trying to follow a Python 2 tutorial while running Python 3.

यह एक बग है: पोस्ट What does “SyntaxError: Missing parentheses in call to 'print'” mean in Python? में शीर्ष जवाब भी इस का समर्थन करने लगता है? यदि हां, तो इसका क्या कारण है?

उत्तर

8

IndentationErrorSyntaxError का एक उपवर्ग है, इसलिए तकनीकी रूप से, इस है एक सिंटैक्स त्रुटि उठाया जा रहा।

आपके पास दो त्रुटियां हैं। इंडेंटेशन दोनों गलत हैं और आप कोष्ठक याद आ रहे हैं। यह एक बग है, SyntaxError संदेश बदलता है जब print विशेष मामला पता चला है, और वह कोड अभी भी SyntaxError के उप-वर्गों के लिए लागू होता है (यह SyntaxError अपवाद निर्माता में लागू होता है)।

आप TabError अपवाद के लिए एक ही त्रुटि पैदा कर सकते हैं:

>>> compile('if 1:\n 1\n\tprint "Look ma, tabs!"', '', 'single') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "", line 3 
    print "Look ma, tabs!" 
         ^
TabError: Missing parentheses in call to 'print' 

SyntaxError codepath exec() और print() किनारे मामलों के लिए जाँच करना चाहिए वास्तविक SyntaxError उदाहरणों, उपवर्गों नहीं, यह सिर्फ भ्रामक है के रूप में के लिए वास्तव में केवल आग ।

मैंने इसे ट्रैक करने के लिए issue 31161 दायर किया है।

+0

तो आप कह रहे हैं कि यह इरादा व्यवहार है? –

+0

@ क्रिस्टियन डीन: काफी नहीं, मैं देखता हूं कि यह अभी तक एक बग के रूप में दायर किया गया है या नहीं। –

+0

_ "आपके पास दो त्रुटियां हैं।" _ - लेकिन अगर मुझे यहां दो त्रुटियां हैं, तो क्या पाइथन आमतौर पर कुछ नहीं कहता है "उपर्युक्त अपवाद को संभालने के दौरान, एक और अपवाद हुआ"? –

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