IndentationError: unindent किसी भी बाहरी इंडेंटेशन स्तर से मेल नहीं खाता है


584

जब मैं नीचे पायथन कोड संकलित करता हूं, मुझे मिलता है

IndentationError: unindent किसी भी बाहरी इंडेंटेशन स्तर से मेल नहीं खाता है


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

क्यों?


7
और शायद सीमा (1, n + 1) बेहतर होगी, यदि आप अपने गणना में 'n' को शामिल करना चाहते हैं :-)
Abgan

7
मेरे पास एक ही त्रुटि थी, लेकिन मैं कोड में थोड़ा ऊपर बाईं ओर एक विधि को इंडेंट करने के लिए हुआ , जिसने इसके बाद अगली विधि के निचले भाग में यह त्रुटि दी । तो यह त्रुटि न केवल टैब और रिक्त स्थान को मिलाने से हो सकती है।
प्रो। फाल्कन कॉन्ट्रैक्ट ने

14
मैं उदात्त पाठ 3 का उपयोग कर रहा हूँ। मेरे पास एक Django परियोजना है। मैंने त्रुटि का उपयोग करते हुए तय कियाView > Indentation > Intent Using Spaces
अभिमन्यु आर्यन

इस मुद्दे में pycharm था, टैब को समायोजित करना और कॉन्फ़िगरेशन में रिक्ति का काम नहीं किया। मुद्दा मैं एक ~ / .editorconfig फ़ाइल था जो कि pycharm कॉन्फ़िगरेशन को ओवरराइड कर रहा था।
केन मायर्स

मैंने पाया कि IDLE का उपयोग करने से इंडेंटेशन मुद्दों को खोजने में बहुत आसानी होती है। यह स्पष्ट रूप से इंडेंटेशन त्रुटियों को ढूंढेगा जो अधिकांश संपादकों को नहीं मिलेंगे।
डेनिस गथगु

जवाबों:


668

अन्य पोस्टर शायद सही हैं ... आपके टैब के साथ मिश्रित स्थान हो सकते हैं। कुछ स्थानों के साथ सभी टैब को बदलने के लिए एक खोज और बदलने का प्रयास करें।

इसे इस्तेमाल करे:

import sys

def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

print Factorial(10)

2
हाँ, मुझे वास्तव में पिछले दो लाइनों (केवल SO में) पर आंतरिक लूप भाग पर जगह देना था। यकीन नहीं होता क्यों ...
cbrulak

3
मेरी पहली पंक्ति, "परिणाम = 0" (जिसे सुधारा जाना चाहिए 1, सही करने के लिए धन्यवाद) को स्थान दिया गया था, जबकि बाकी को टैब्ड किया गया था,
डारन

1
हाँ, यह मुश्किल हो सकता है। मैं अजगर को संपादित करने के लिए emacs का उपयोग करता हूं, और मेरे पास यह हमेशा py फ़ाइलों में रिक्त स्थान के साथ टैब को बदलने के लिए सेटअप है, इसलिए मुझे यह समस्या नहीं है। नोटपैड ++ में भी इस तरह का विकल्प हो सकता है।
केविन बाघे

3
एक ही समस्या मिल गया :)। SublimeText डॉट्स के रूप में रिक्त स्थान दिखाता है, यह बहुत उपयोगी है।
क्रिस

तो आप पर पकड़ अंतरिक्ष या टैब के साथ इंडेंट कर सकते हैं। आपको बस संजीदा होने की आवश्यकता है? बैंग्स हेड
डेविड

265

महत्वपूर्ण : रिक्त स्थान पसंदीदा तरीका है - PEP008 इंडेंटेशन और टैब्स या रिक्त स्थान देखें? । (इसके लिए @Siha को धन्यवाद।)

के लिए Sublime Textउपयोगकर्ताओं को:

Sublime Textइंडेंटेशन के लिए टैब का उपयोग करने के लिए सेट करें : View-> Indentation->Convert Indentation to Tabs

Indent Using Spacesविकल्प को अनचेक करें और साथ ही ऊपर उप-मेनू में भी। यह तुरंत इस मुद्दे को हल करेगा।


1
जब भी पायथन का उपयोग कर रहे हों, तो सुनिश्चित करें कि आपने जो भी IDE / Text Editor उपयोग किया है
सक्रियण

20
एटीओएम पर भी, पैकेज> व्हाट्सएप> स्पेस को टैब्स में बदलें और आप पायथन के सिंटैक्स त्रुटि कैश से बचेंगे!
लोरेटोपरिसी

1
रिक्त स्थान पसंदीदा तरीका है - PEP008 इंडेंटेशन और टैब या स्पेस देखें? । उदात्त भी इसे इस तरह से करने के लिए सेटअप किया जा सकता है।
सिहा

13
आप कहते हैं कि स्थान पसंदीदा तरीका है, फिर भी आपका जवाब लोगों को उदासीनता के बजाय टैब का उपयोग करने के लिए कहता है! मैं उलझन में हूँ
gota

@NunoCalaim दुर्भाग्य से, यह तब हुआ जब मैंने प्रश्न का उत्तर दिया था। यदि आप एक नई परियोजना शुरू कर रहे हैं, तो कृपया रिक्त स्थान की पसंदीदा तकनीक का उपयोग करें। यही कारण है कि मैंने बोल्ड में एक संपादन किया ताकि किसी भी नवागंतुक को अस्वीकरण के बारे में पता हो।
activatedgeek

137

टैब / रिक्त स्थान की समस्याओं की आसानी से जाँच करने के लिए आप वास्तव में ऐसा कर सकते हैं:

python -m tabnanny yourfile.py

या आप अपने संपादक को सही ढंग से सेट कर सकते हैं :-)


1
मैंने कुछ टैब / स्पेस इंडेंटेशन त्रुटि वाली फ़ाइल में यह कोशिश की, लेकिन गलत टैब फ़ाइल के साथ कोई आउटपुट नहीं। कोई उपाय?
लूचक्स

1
मुझे रिक्त स्थान के साथ एक समस्या थी और त्रुटि ने कहा कि यह रेखा 191 पर थी, लेकिन टैबैनी के लिए धन्यवाद मैंने पाया कि वास्तविक समस्या उस रेखा पर नहीं थी, बल्कि ऊपर की रेखा में थी।
ऋचा r० r६

धन्यवाद! क्या शानदार टिप है। VS कोड में flake8 द्वारा त्रुटि की पहचान की गई थी, लेकिन यह पहचान नहीं कर सका कि समस्या कहां थी - एक microsecond में tabnanny ने किया था।
स्टीव

39

क्या आप वाकई अपने इंडेंटेशन व्हाइट स्पेस में टैब और स्पेस को नहीं मिला रहे हैं? (उस त्रुटि का कारण होगा।)

ध्यान दें, यह अनुशंसा की जाती है कि आप पायथन कोड में टैब का उपयोग न करें। स्टाइल गाइड देखें । टैब के लिए स्थान सम्मिलित करने के लिए आपको नोटपैड ++ को कॉन्फ़िगर करना चाहिए।


मैं उलझन में हूं। रिक्त स्थान के बजाय टैब का उपयोग करने के लिए एक टेक्स्ट एडिटर विकल्प को स्विच करने के लिए ऊपर दिए गए उत्तर।
5

3
@BananaCode जब तक आप केवल टैब या केवल रिक्त स्थान का उपयोग करते हैं, यह तकनीकी रूप से कोई फर्क नहीं पड़ता जो आप चुनते हैं। हालांकि अजगर के लिए, स्थान पसंद किए जाते हैं, उस लिंक को देखें जिसे मैंने संदर्भित किया था।
zdan

21

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


13

यदि आप पायथन के आईडीएलई संपादक का उपयोग करते हैं, तो आप उसी तरह के त्रुटि संदेशों में से एक में सुझाव दे सकते हैं:

1) सभी का चयन करें, जैसे Ctrl +A

2) प्रारूप पर जाएं -> रीजन को अनअबाइब करें

3) अपने इंडेंटिंग को दोहराएं, अभी भी सही है, अपने प्रोग्राम को सेव और रीयर करें।

मैं पायथन 2.5.4 का उपयोग कर रहा हूं


9

यदि आप विम का उपयोग कर रहे हैं, तो बच और फिर टाइप करें

gg = जी

यह ऑटो सब कुछ इंगित करता है और आपके द्वारा फेंके गए किसी भी स्थान को साफ कर देगा।


8

रेखा: result = result * i इंडेंट होनी चाहिए (यह फॉर-लूप की बॉडी है)।

या - आपके पास मिश्रित स्थान और टैब वर्ण हैं


मुझे SO में संपादन बदलना पड़ा, अजीब। प्रश्न में मेरे अपडेट किए गए "एडिट" नोट देखें
cbrulak

ठीक है, इसलिए मुझे विश्वास है कि मेरे उत्तर की दूसरी पंक्ति सही है - आपके पास मिश्रित स्थान और टैब वर्ण हैं (क्रमशः ASCII में 32 और 8)
Abgan

5

पर एटम

के लिए जाओ

Packages > Whitespace > Convert Spaces to Tabs

फिर अपने फ़ाइल इंडेंटेशन की जाँच करें:

python -m tabnanny yourFile.py

या

>python
>>> help("yourFile.py")

4

एक इंडेंटेशन समस्या लगती है। आपको पायथन में घुंघराले कोष्ठक से मेल नहीं खाना है, लेकिन आप करते हैं इंडेंटेशन स्तर से मिलान करने के लिए है।

अंतरिक्ष / टैब समस्याओं को रोकने का सबसे अच्छा तरीका है कि आपके पाठ संपादक के भीतर अदृश्य अक्षर प्रदर्शित हों। यह आपको इंडेंटेशन संबंधी त्रुटियों को रोकने और / या हल करने का एक त्वरित तरीका देगा।

साथ ही, कॉपी-पेस्ट कोड को इंजेक्ट करना इस प्रकार की समस्या के लिए एक सामान्य स्रोत है।


4

यदि आप नोटपैड ++ का उपयोग करते हैं, तो \ t खोजने के लिए विस्तारित खोज मोड के साथ एक "बदलें" और चार स्थानों के साथ बदलें।


2

एटम उपयोगकर्ताओं के लिए, Packages ->whitspace -> remove trailing whitespaces इसने मेरे लिए काम किया


2

बस एक जोड़ है। मुझे नोटपैड ++ में दोनों इंडेंटेशन के साथ एक समान समस्या थी।

  1. अप्रकाशित इंडेंटेशन
  2. बाहरी संकेत स्तर

    करने के लिए ----> खोज टैब ----> पर नल जाओ की जगह ----> रेडियो बटन मारा विस्तारित नीचे ---> अब चार रिक्त स्थान के साथ \ t की जगह

    करने के लिए ----> खोज टैब ----> पर नल जाओ की जगह ----> रेडियो बटन मारा विस्तारित नीचे ---> अब n कुछ नहीं के साथ बदलें \


2

मैं Jupyter नोटबुक का उपयोग कर रहा था और लगभग सभी समाधानों (मेरे परिदृश्य के अनुकूल) का उपयोग करने की कोशिश की। मैं तब लाइन से लाइन पर चला गया, प्रत्येक पंक्ति के लिए सभी रिक्त स्थान हटा दिए गए और टैब के साथ बदल दिया गया। इससे मसला हल हो गया।



1

यह हो सकता है क्योंकि इसके ऊपर फ़ंक्शन समान तरीके से इंडेंट नहीं किया जाता है। अर्थात

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

1

कल मेरे पास एक ही मुद्दा था, यह इंडेंटेशन त्रुटि थी, उदात्त पाठ संपादक का उपयोग कर रहा था। मेरे घंटे इसे ठीक करने की कोशिश कर रहे थे और अंत में मैंने VI पाठ संपादक में कोड की प्रतिलिपि बनाई और यह ठीक काम किया। ps python बहुत व्हाट्सएप संवेदनशील है, सुनिश्चित करें कि स्पेस और टैब को मिक्स न करें।


1

चूंकि मुझे एहसास है कि इसका कोई जवाब नहीं है spyder, इसलिए मैं इसमें एक जोड़ दूंगा: मूल रूप से, ध्यान से अपने ifबयान को देखें और सभी को सुनिश्चित करें if, elifऔर elseएक ही रिक्ति है कि वे शुरू में एक ही पंक्ति में हैं जैसे:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")

1

मेरे पास एक फ़ंक्शन परिभाषित था, लेकिन इसकी फ़ंक्शन टिप्पणियों के अलावा इसकी कोई सामग्री नहीं थी ...

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

यह चिल्लाया:

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

(ध्यान दें कि रेखा जिस ^बिंदु को इंगित करती है वह रिक्त है)

-

कई समाधान:

1: बस फंक्शन को कमेंट करें

2: फ़ंक्शन टिप्पणी जोड़ें

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3: कुछ भी नहीं है कि लाइन जोड़ें

def foo(bar):
    0

किसी भी मामले में, यह स्पष्ट करना सुनिश्चित करें कि यह एक खाली कार्य क्यों है - अपने लिए, या अपने साथियों के लिए जो आपके कोड का उपयोग करेंगे


पास बयान उपयोगी हो सकता है वहाँ :)
KevinG

1

सबसे पहले, बस आपको याद दिलाने के लिए एक तार्किक त्रुटि है जिसका आप बेहतर परिणाम = 1 रखते हैं अन्यथा लूप के चलने के बाद भी आपका आउटपुट परिणाम = 0 होगा।

दूसरे आप इसे इस तरह लिख सकते हैं:

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

एक पंक्ति छोड़ने से अजगर शेल को बताएगा कि फॉर स्टेटमेंट समाप्त हो गए हैं। यदि आपके पास अजगर के खोल का उपयोग करने का अनुभव है, तो आप समझ सकते हैं कि हमें एक पंक्ति क्यों छोड़नी है।


1

इसकी कीमत के लिए, मेरी डॉकस्ट्रिंग बहुत ज्यादा इंडेंट की गई थी और यह भी उसी त्रुटि को बढ़ाती है

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level


इसने मेरे मुद्दे को तय किया
bhordupur

0

ऐसा इसलिए है क्योंकि इसमें टैब और स्पेस दोनों का मिश्रण है। आप या तो सभी रिक्त स्थान निकाल सकते हैं और उन्हें टैब से बदल सकते हैं।

या, यह लिखने का प्रयास करें:

#!/usr/bin/python -tt

कोड की शुरुआत में। यह रेखा टैब और रिक्त स्थान के बीच किसी भी अंतर को हल करती है।



0

यदि आप कोमोडो संपादक का उपयोग करते हैं तो आप ऐसा कर सकते हैं जैसा कि एक त्रुटि संदेश में से एक में पता चलता है:

1) सभी का चयन करें, जैसे Ctrl + A

2) कोड पर जाएं -> अनटैबिफायड रीजन

3) अपने इंडेंटिंग को दोहराएं, अभी भी सही है, अपने प्रोग्राम को सेव और रीयर करें।

मैं पायथन 3.4.2 का उपयोग कर रहा हूं


0

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

  1. उदात्त में अपनी फ़ाइल खोलें
  2. खुले स्थानों पर राइट क्लिक करें
  3. एनाकोंडा चुनें
  4. ऑटोफार्माट पर क्लिक करें
  5. हो गया या CTRL + ALT + R दबाएँ।

0

अजगर प्लगइन के साथ intellij में, Ctrl + Shift + Alt दस्तावेज़ में सुधार करने के लिए इंडेंट / टैब / रिक्त स्थान की समस्या को ठीक किया


0

के लिए SPYDER उपयोगकर्ताओं: मैं अजगर 3.7.1 के साथ स्पाइडर 3.3.2 का उपयोग कर रहा है और मैं इस हल, उपयोग टैब के लिए खरोज की स्थापना, निम्न चरणों के साथ, पर क्लिक करें:

  • उपकरण।
  • पसंद।
  • संपादक।
  • एडवांस सेटिंग।
  • इंडेंटेशन वर्ण -> टैब।

तब मैं टैब कुंजी का उपयोग करके "अज्ञात" लाइन रीसेट करता हूं।

किसी कारण के लिए, इस सेटिंग के बिना, मुझे कभी-कभी भूत का इंडेंटेशन मिला ।


0

उदाहरण के लिए:

1. def convert_distance(miles):
2.   km = miles * 1.6
3.   return km

इस कोड में मेरे लिए एक ही स्थिति उत्पन्न हुई। बस पंक्ति 2 और 3 के पिछले इंडेंट रिक्त स्थान को हटा दें, और फिर या तो टैब या स्थान का उपयोग करें। कभी भी दोनों का उपयोग न करें । अजगर में कोड लिखते समय उचित इंडेंटेशन दें। स्पाइडर गोटो के लिए सोर्स> फिक्स इंडेंटेशन। वही VC कोड और उदात्त पाठ या किसी अन्य संपादक के पास जाता है। इंडेंटेशन ठीक करें।


-6

यह मुख्य रूप से संपादक के कारण होता है। स्थान (4) में टैब बदलने की कोशिश करें। सबसे अच्छा अजगर अनुकूल आईडीई या संपादकों लाइक के लिए pycharm, उदात्त, विम हैं।
यहां तक ​​कि मैंने भी इसी मुद्दे का सामना किया था, बाद में मैंने पाया कि एन्कोडिंग मुद्दा है। मेरा सुझाव है कि यू एडिटर को भी बदलें।

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