अजगर में "अनपेक्षित इंडेंट" के साथ क्या करना है?


117

मैं अजगर में "अप्रत्याशित इंडेंट" त्रुटि को कैसे ठीक करूं?


4
एक कोड टुकड़ा जो त्रुटि पैदा करता है, हमें आपकी समस्या को बेहतर ढंग से समझने में मदद करेगा। कृपया कुछ कोड शामिल करने के लिए अपने प्रश्न को संपादित करें।
RBerteig

7
यह मेरे लिए एक व्हाट्सएप मुद्दे की तरह लगता है इसलिए एक कोड नमूना बेकार होगा।
जेम्स मैकमोहन

अस्पष्ट सवाल और कोई जवाब नहीं चुना।
राफेल.जेएस

"मैं त्रुटि को कैसे ठीक करूं ..."? यह पहचान कर कि यह कहां हुआ और त्रुटि का कारण तय करना। इस मामले में, उस विशेष पंक्ति का
संकेत बनाकर देखें

जवाबों:


132

कोड ब्लॉक शुरू होने और समाप्त होने पर निर्धारित करने के लिए पायथन लाइन की शुरुआत में रिक्ति का उपयोग करता है। आपके द्वारा प्राप्त त्रुटियाँ हैं:

अप्रत्याशित मांगपत्र। कोड की इस पंक्ति में पहले की तुलना में अधिक स्थान हैं, लेकिन पहले वाला सबब्लॉक की शुरुआत नहीं है (उदाहरण के लिए / जबकि / बयान के लिए)। एक ब्लॉक में कोड की सभी पंक्तियों को व्हाट्सएप के बिल्कुल समान स्ट्रिंग से शुरू होना चाहिए। उदाहरण के लिए:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

यह एक विशेष रूप से सामान्य है जब अंतःक्रियात्मक रूप से चल रहा है: सुनिश्चित करें कि आपने अपने आदेशों से पहले कोई अतिरिक्त स्थान नहीं रखा है। (उदाहरण के कोड को कॉपी-पेस्ट करने पर बहुत कष्टप्रद!)

>>>   print "hello"
IndentationError: unexpected indent

Unindent किसी भी बाहरी इंडेंटेशन स्तर से मेल नहीं खाता है। कोड की इस पंक्ति में पहले की तुलना में शुरुआत में कम स्थान हैं, लेकिन समान रूप से यह किसी अन्य ब्लॉक से मेल नहीं खाता है जो इसका हिस्सा हो सकता है। अजगर तय नहीं कर सकता कि वह कहाँ जाता है। उदाहरण के लिए, निम्नलिखित में, अंतिम प्रिंट अगर क्लॉज का हिस्सा माना जाता है, या नहीं?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

एक दांतेदार ब्लॉक की उम्मीद की उम्मीद थी। कोड की इस लाइन में शुरुआत में पहले की तरह ही रिक्त स्थान है, लेकिन अंतिम पंक्ति में ब्लॉक शुरू होने की उम्मीद थी (जैसे कि / जबकि / बयान के लिए, फ़ंक्शन परिभाषा)।

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

यदि आप ऐसा फ़ंक्शन चाहते हैं जो कुछ भी नहीं करता है, तो "नो-ऑप" कमांड पास का उपयोग करें :

>>> def foo():
...     pass

टैब और रिक्त स्थान को मिलाने की अनुमति है (कम से कम मेरे पायथन के संस्करण पर), लेकिन पायथन मान लेता है कि टैब 8 वर्ण लंबे हैं, जो आपके संपादक से मेल नहीं खा सकते हैं। टैब के लिए बस "नहीं" कहें। अधिकांश संपादक उन्हें स्वचालित रूप से रिक्त स्थान द्वारा प्रतिस्थापित करने की अनुमति देते हैं।

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


7
अच्छे खर्च। इसके अलावा, मैंने नोटपैड ++ में 'टैब' और 'स्पेस बार' के साथ रिक्त स्थान मिलाए जाने पर भी अप्रत्याशित त्रुटि पर विचार किया।
जोस रोजास सांग

2
@ JoséRosasSáenz आपकी टिप्पणी ने मुझे बहुत परेशान किया
user3726345

एक अतिरिक्त कारण exceptएक tryखंड के भाग को याद कर रहा है । कोड सही दिखता है (इसमें अनइंडेंटेड लाइन tryब्लॉक के बाहर होती है ) लेकिन पायथन इसे 'अनपेक्षित इंडेंट' त्रुटि के रूप में रिपोर्ट करता है। यह निश्चित रूप से (जैसे यहाँ ) exceptका उपयोग करके तय किया गया हैpass
dumbledad

@ डंबल्डड अजगर के किस संस्करण को आप देखते हैं? जब मैं अपना प्रयास करता हूं (दोनों 2.7.15 और 3.6.8), तो मुझे एक सिंटेक्स एरर मिलता है
ऐलिस परसेल

वेबसाइट से कोड कॉपी / पेस्ट करते समय मुझे यह त्रुटि आई। स्थिति ठीक दिखाई दी, लेकिन मुझे QGIS (3.10) कोड चलाने से पहले रिक्त स्थान का उपयोग करके श्वेत-स्थान को हटा देना चाहिए।
बेन्ज

23

पायथन में, रिक्ति बहुत महत्वपूर्ण है, यह आपके कोड ब्लॉक की संरचना देता है। यह त्रुटि तब होती है जब आप अपनी कोड संरचना को गड़बड़ करते हैं, उदाहरण के लिए:

def test_function() :
   if 5 > 3 :
   print "hello"

आपकी फ़ाइल में टैब और रिक्त स्थान का मिश्रण भी हो सकता है।

मेरा सुझाव है कि आप PyScripter , या Netbeans की तरह एक अजगर वाक्यविन्यास जागरूक संपादक का उपयोग करें


1
हाँ निश्चित रूप से अजगर-जागरूक संपादकों का उपयोग करें! मुझे एक समस्या थी जहां मैं डिफ़ॉल्ट सेटिंग्स के साथ नोटपैड ++ में संपादन कर रहा था और यह व्हाट्सएप गलत हो रहा था
डेव आर्चर

2
मिश्रित टैब और रिक्त स्थान "सिंटैक्सएर्रर: असंगत उपयोग टैब और रिक्त स्थान का इंडेंटेशन में
बढ़ाते हैं

सिर्फ़ एक सिर के रूप में, पायथन नेटबिन्स प्लगइन वर्तमान में टैब को मौजूदा कोड से रिक्त स्थान में परिवर्तित नहीं करता है। हालाँकि, यह ऐसा करेगा जैसे आप नया कोड लिखते हैं।
जेम्स मैकमोहन

PyCharm इसे लगातार रूपांतरित कर सकते हैं। इसके अलावा यह "गलती" पर लाइनों को उजागर करेगा। मैं उद्धरणों का उपयोग करता हूं क्योंकि यह 1960 का दशक नहीं है और मैं एक अद्भुत भाषा पर विश्वास नहीं कर सकता, जैसे कि पायथन में अभी भी यह मस्तिष्क-मृत, समय बर्बाद करने वाला दोष है।
इकोनेलोन

मैंने अपने कोड लिखने के माध्यम से अनजाने में संपादकों को आधा कर दिया और इसने नए कोड में मेरे इंडेंट को भर दिया। परिवर्तन आँख से स्पष्ट नहीं था, लेकिन दुभाषिया मेरा कोड नहीं चलाएगा। इस पोस्ट ने मुझे समस्या खोजने में मदद की।
लुसिएन स्टाल्स

21

यदि आप टैब और रिक्त स्थान का असंगत रूप से उपयोग कर रहे हैं, तो यह पता करने के लिए -tt विकल्प के साथ अपना कोड चलाएँ


16

जो भी संपादक आप उपयोग कर रहे हैं उसमें दृश्य व्हाट्सएप चालू करें और टैब को रिक्त स्थान के साथ चालू करें।

जबकि आप पायथन मिश्रण टैब के साथ टैब का उपयोग कर सकते हैं और अंतरिक्ष आमतौर पर उस त्रुटि की ओर जाता है जिसे आप अनुभव कर रहे हैं। 4 स्थानों के साथ टैब को बदलना पायथन कोड लिखने के लिए अनुशंसित दृष्टिकोण है।


1
आप विशेष रूप से ऐसा कैसे करते हैं? मैं उदात्त का उपयोग कर रहा हूँ।
चिबोल

8

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


6

यदि आप उदात्त का उपयोग करके पायथन लिख रहे हैं और इंडेंटेशन त्रुटियों को प्राप्त कर रहे हैं,

दृश्य -> ​​इंडेंटेशन -> इंडेंटेशन को स्पेस में बदलें

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


ओह ... तो उदात्त यह कारण है?
नितिन

हाँ, मैं जिस मुद्दे का वर्णन कर रहा हूँ, वह उदात्तता के कारण है। अन्य संपादकों के कारण भी हो सकता है। अनिवार्य रूप से, इस मुद्दे को पायथन को रिक्त स्थान के संदर्भ में इंडेंटेशन का इलाज करना चाहता है, विभिन्न संपादकों को टैब के संदर्भ में इंडेंटेशन को कोड करना है।
पुनीत लांबा

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

4

सुनिश्चित करें कि आप अपने संपादक में "टैब के बजाय रिक्त स्थान डालें" विकल्प का उपयोग करें। तब आप चुन सकते हैं कि आप टैब की चौड़ाई चाहते हैं, उदाहरण के लिए 4. आप संपादित करें के तहत gedit में उन विकल्पों को पा सकते हैं -> वरीयताएँ -> संपादक।

निचला रेखा: USE SPACES टैब नहीं है


आपकी बॉटम लाइन ने कर दी चाल!
निक डिव

3

पायथन इंटरप्रेटर (टर्मिनल / कंसोल) में कुछ चिपकाने पर यह त्रुटि भी हो सकती है।

ध्यान दें कि दुभाषिया एक अभिव्यक्ति के अंत के रूप में एक खाली रेखा की व्याख्या करता है, इसलिए यदि आप किसी चीज़ में पेस्ट करते हैं

def my_function():
    x = 3

    y = 7

दुभाषिया y = 7अभिव्यक्ति के अंत से पहले खाली लाइन की व्याख्या करेगा , यानी कि आप अपने कार्य को परिभाषित कर रहे हैं, और अगली पंक्ति में - y = 7गलत इंडेंटेशन होगा क्योंकि यह एक नई अभिव्यक्ति है।


महत्वपूर्ण यह है कि फ़ंक्शन परिभाषा के भीतर रिक्त लाइनें ठीक हैं, लेकिन उनके पास अभी भी प्रारंभिक व्हाट्सएप होना चाहिए क्योंकि पायथन फ़ंक्शन के अंत के रूप में किसी भी रिक्त लाइन की व्याख्या करता है
माइकलचिरिको

3

एक मुद्दा जिसका उल्लेख नहीं किया गया है, वह यह है कि यह त्रुटि कोड की समस्या के कारण उत्पन्न हो सकती है, जिसका इंडेंटेशन से कोई लेना-देना नहीं है।

उदाहरण के लिए, निम्नलिखित स्क्रिप्ट लें:

def add_one(x):
    try:
        return x + 1
add_one(5)

IndentationError: unexpected unindentजब समस्या निश्चित रूप से एक गायब except:बयान है तो यह वापस आ जाता है।

मेरा बिंदु: ऊपर कोड की जाँच करें जहाँ अप्रत्याशित (संयुक्त) इंडेंट की सूचना दी गई है!


2

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


2

एक चाल है कि हमेशा मेरे लिए काम किया है:

यदि आपको मिला और अप्रत्याशित इंडेंट है और आप देखते हैं कि सभी कोड पूरी तरह से इंडेंट हैं, तो इसे दूसरे संपादक के साथ खोलने का प्रयास करें और आप देखेंगे कि कोड की कौन सी लाइन इंडेंट नहीं है।

मेरे साथ ऐसा तब हुआ जब मैंने विम, गेदिट या संपादकों का इस्तेमाल किया।

अपने कोड के लिए केवल 1 संपादक का उपयोग करने का प्रयास करें।


2

बस अपनी स्क्रिप्ट को कॉपी करें और "" आपका पूरा कोड "" "...

इस लाइन को एक चर में निर्दिष्ट करें .. जैसे,

a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..

अब इस कोड को निष्पादित करें, Sublime Editor में ctrl + b का उपयोग करके, अब यह कंसोल में इंडेंटेड कोड प्रिंट करेगा। बस


मैं अपना कोड कैसे चलाऊंगा। क्या मुझे "" और "" और प्रिंट a.replace को निकालना होगा और इसे सामान्य रूप से चलाना होगा?
चिबोल

कोई "" "" "" (ट्रिपल कोट्स) स्ट्रिंग के बजाय आपकी सामग्री को संदर्भित करता है। इसकी आवश्यकता है क्योंकि आपके कोड में स्ट्रिंग हो सकती है जो कि सिंगल / डबल कोट्स है इसलिए "" आवश्यक है।
मोहिदीन बिन मोहम्मद

2

आपको केवल निम्नलिखित कोड की शुरुआत से रिक्त स्थान या टैब रिक्त स्थान निकालने की आवश्यकता है

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

2

इसे हल करने के लिए निम्नलिखित कमांड चलाएँ:

autopep8 -i <filename>.py

यह आपके कोड को अपडेट करेगा और सभी इंडेंटेशन त्रुटियों को हल करेगा :)

उम्मीद है कि यह हल हो जाएगा


लागू करने के लिए बहुत आसान है। मेरे लिए हर समय काम करता है इसलिए मैंने आशा
व्यक्त की है

1

नोटपैड ++ टैब स्पेस को सही दे रहा था, लेकिन इंडेंटेशन की समस्या आखिरकार सबलाइम टेक्स्ट एडिटर में पाई गई।

उदात्त पाठ संपादक का उपयोग करें और लाइन से लाइन पर जाएं


0

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

Step1 :Gives error 
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])

Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])

Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]

धन्यवाद!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.