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


218

मैं पायथन 3.2 में एक एप्लिकेशन बनाने की कोशिश कर रहा हूं और मैं हर समय इंडेंटेशन के लिए टैब का उपयोग करता हूं, लेकिन यहां तक ​​कि संपादक ने उनमें से कुछ को रिक्त स्थान में बदल दिया और फिर "इंडेंटेशन में टैब और स्पेस का असंगत उपयोग" जब मैं चलाने की कोशिश करता हूं कार्यक्रम।

मैं रिक्त स्थान को टैब में कैसे बदल सकता हूं? यह मुझे पागल कर रहा है। (मैं प्रोग्रामिंग में एक शुरुआत हूं)। मुझे खुशी होगी अगर मुझे अपने कोड पर कुछ समग्र सुझाव मिल सकते हैं, अगर मैंने बहुत सारी गलतियाँ की हैं तो मुझे सुनकर खुशी होगी।

import random

attraktioner = ["frittfall","bergodalbana","spökhuset"]


class Nojesfalt:
    def __init__(self, attraktion):
        self.val = attraktion
        self.langd = 0
        self.alder = 0


#längdgräns för fritt fall
    def langdgrans(self):
        print("")
        self.langd = int(input("Hur lång är du i cm? "))
        if self.langd < 140:
            print("tyvärr, du är för kort, prova något annat")
            return 0
        elif self.langd >= 140:
            print("håll dig hatten, nu åker vi!")
            print(" ")
            return 1

#åldersgräns för spökhuset
    def aldersgrans(self):
        print("")
        self.alder = int(input("Hur gammal är du? "))
        if self.alder < 10:
            print("tyvärr, du är för ung, prova något annat")
            return 0
        elif self.alder >= 10:
            print("Gå in om du törs!")
            print(" ")
            return 1


#åker attraktion frittfall lr bergodalbana
        def aka(self):
                print("")
        print(self.val)
        tal = random.randint(0,100)
        if tal < 20:
            print("åkturen gick åt skogen, bättre lycka nästa gång")
        elif tal >= 20:
            print("jabbadabbbadoooooooo")
            return 1

#går i spökhuset
        def aka1(self):
                print("")
        print(self.val)
        tal = random.randint(0,100)
        if tal < 20:
            print("du är omringad av spöken och kan inte fortsätta")            return 0
        elif tal >= 20:
            print("Buhuuuuuu, buuuhuuuu")
            return 1

#programkod
print("Välkommen till nöjesfältet, vad vill du göra?")
print(" ")

while 1:
    vald_attr = input("Vad vill du göra?\n1. frittfall\n2. bergodalbana\n3. spökhuset\n4. Avsluta\n")
    if vald_attr == "1":
        val = Nojesfalt(attraktioner[0])
        if val.langdgrans() == 1:
            val.aka()
    elif vald_attr == "2":
        val = Nojesfalt(attraktioner[1])
        val.aka()
    elif vald_attr == "3":
        val = Nojesfalt(attraktioner[2])
        if val.aldersgrans() == 1:
            val.aka1()
    elif vald_attr == "4":
        break

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

3
आप इसे कैसे बदलते हैं यह आपके संपादक पर निर्भर करता है। मुझे यकीन नहीं है कि यह यहां भी विषय पर है, यह सुपरयूजर के लिए एक सवाल हो सकता है।
लेन्नर्ट रीजबोर

पंक्ति के प्रारंभ में दृश्यमान व्हाट्सएप दिखाने के लिए अपने संपादक को बदलें। उदाहरण के लिए, मैंने पारदर्शी टैब और दृश्यमान रिक्त स्थान दिखाने के लिए अपने संपादक को कॉन्फ़िगर किया है क्योंकि मैं टैब को इंडेंट कोड का उपयोग करता हूं। यदि मुझे लाइन के प्रारंभ में कोई शोर दिखाई देता है, तो मुझे पता है कि एक या अधिक अतिरिक्त स्थान हैं। यदि आप इसे गलत तरीके से करने पर जोर देते हैं, तो आप अपने संपादक को रिक्त स्थान छिपाने और टैब दिखाने के लिए कॉन्फ़िगर कर सकते हैं। (हाँ, मुझे PEP-8 के बारे में पता है, लेकिन मैं इससे सहमत नहीं हूं।)
मिकको रैंटलैनेन

जवाबों:


273

टैब का उपयोग न करें।

  1. इंडेंटेशन के लिए 4 रिक्त स्थान का उपयोग करने के लिए अपने संपादक को सेट करें ।
  2. एक खोज करें और 4 टैब के साथ सभी टैब को बदलने के लिए बदलें।
  3. सुनिश्चित करें कि आपका संपादक 8 स्थानों के रूप में टैब प्रदर्शित करने के लिए सेट है ।

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


7
क्या इन हठधर्मियों के पीछे कोई तर्क है?
रॉकेट जूल

1
@ लेन्नर्ट रेग्रोब, मेरा मतलब है कि रिक्त स्थान का उपयोग करना। मैं उनका उपयोग करता हूं लेकिन अनजाने में, टैब मुझे बेहतर लगते हैं। वैसे, रूबी प्रोग्रामिंग में हर कोई 2 रिक्त स्थान का उपयोग करता है, इसलिए यह सभी के लिए एक नियम नहीं है।
रॉकेट

3
@RocketR: इसका जवाब पायथन के लिए है। यदि आप केवल टैब का उपयोग करते हैं, तो आपको 8-स्थान इंडेंटेशन मिलता है, जब तक कि आप टैब को 8 स्थानों की तुलना में किसी और चीज़ में विस्तारित नहीं करते हैं, उस स्थिति में यह अन्य संपादकों पर बुरा लगेगा। यदि आप टैब और रिक्त स्थान मिलाते हैं, तो यह टूट सकता है (प्रश्न देखें) या टूटी हुई दिखें यदि आपके पास टैब के 8-स्पेस विस्तार के अलावा अन्य हैं। संक्षेप में: इंडेंटेशन के लिए टैब का उपयोग करना अविश्वसनीय रूप से बुरा है। कभी भी ऐसा न करें (भाषाओं / फ़ाइल स्वरूपों को छोड़कर जिसकी आवश्यकता है)। समाप्त।
लेन्नर्ट रेगेब्र जूल

2
@RocketR पायथन में Pep8 है, एक दस्तावेज जो "अच्छी अजगर शैली" को सूचीबद्ध करता है, जिसमें स्पष्ट रूप से कहा गया है कि 4 स्थान इंडेंटेशन पर स्वीकृत फॉर्म है।
डैनियल ग्रैज़र

4
"टैब बनाम स्पेस" स्पॉइलर पर प्रासंगिक पीईपी 8 अनुभाग से लिंक करें : पहली पंक्ति "रिक्त स्थान पसंदीदा इंडेंट विधि है।"
तदह मैकडॉनल्ड्स-जेनसेन


43

साथ निष्क्रिय संपादक आप इस का उपयोग कर सकते हैं:

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

15

यदि आप पायथन विकास के लिए उदात्त पाठ का उपयोग कर रहे हैं , तो आप एनाकोंडा पैकेज का उपयोग करके त्रुटि से बच सकते हैं। एनाकोंडा को स्थापित करने के बाद, अपनी फाइल को सब्लिम टेक्स्ट में खोलें, खुले स्थानों पर राइट क्लिक करें → एनाकोंडा चुनें → ऑटोरोमाट पर क्लिक करें। हो गया । या प्रेस Ctrl+ Alt+ R


12

आमतौर पर, लोग अंतरिक्ष के साथ इंडेंट करना पसंद करते हैं। यह संपादकों के बीच अधिक सुसंगत है, जिसके परिणामस्वरूप इस प्रकार के कम मिसमैच होते हैं। हालाँकि, आपको टैब के साथ इंडेंट करने की अनुमति है। यह तुम्हारी पसंद है; हालाँकि, आपको पता होना चाहिए कि प्रति टैब 8 रिक्त स्थान का मानक थोड़ा चौड़ा है।

अपने मुद्दे के बारे में, शायद, आपके संपादक ने गड़बड़ कर दी। टैब को अंतरिक्ष में परिवर्तित करना वास्तव में संपादक पर निर्भर है।

Emacs पर, उदाहरण के लिए, आप विधि को 'अनटैबिफाइ' कह सकते हैं।

कमांड लाइन पर, आप एक सीड लाइन का उपयोग कर सकते हैं (जो भी आपको पसंद हो उसके लिए रिक्त स्थान की संख्या को अनुकूलित करें):

   sed -e 's;\t;       ;' < yourFile.py > yourNedFile.py

9

उदात्त पाठ संपादक का उपयोग करते समय, मैं अपने कोड के खंड का चयन करने में सक्षम था जो मुझे inconsistent use of tabs and spaces in indentationत्रुटि दे रहा था और चुनें:

view > indentation > convert indentation to spaces

जो मेरे लिए समस्या हल हो गई।


8

जब मैंने वही त्रुटि पॉप अप की थी तो क्या किया: सब कुछ ( Str+ A) चुनें और Shift+ दबाएंTab । इसलिए अब कुछ भी इंडेंट नहीं किया गया था। अब उन पंक्तियों पर वापस जाएं जिन्हें आप इंडेंट करना चाहते हैं, और इसे वापस रखें कि आप इसे कैसे चाहते हैं।

इसने मेरे लिए काम किया ...


7

मुझे हाल ही में एक ही समस्या थी और यह पता चला कि मुझे बस .py फ़ाइल के चार्ट को UTF-8 में बदलने की आवश्यकता थी में क्योंकि यह सेट पायथन 3 का उपयोग करता है।

BTW, मैंने हर समय 4-स्पेस टैब का उपयोग किया, इसलिए समस्या उनके कारण नहीं थी।


6

उदात्त पाठ ३

उदात्त पाठ में, जबकि संपादन एक अजगर फ़ाइल:

उदात्त पाठ मेनू > प्राथमिकताएँ > सेटिंग्स - सिंटैक्स विशिष्ट :

Python.sublime-सेटिंग

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true
}

5

4 s के साथ s का उपयोग notepad++करके इस समस्या को हल करना संभव है :TabSpace

  1. खोज चुनें -> खोजें ... या दबाएँ Ctrl+F
  2. बदलें टैब का चयन करें
  3. नामित बॉक्स में खोज मोड का चयन विस्तारित (\ N, \ r, \ t, \ 0, \ एक्स ...)
  4. फ़ील्ड में खोजें: क्या लिखें \ t
  5. फ़ील्ड में इसके साथ बदलें:Space 4 बार दबाएँ । सुनिश्चित करें कि इस क्षेत्र में और कुछ नहीं है।
  6. बटन रिप्लेसमेंट ऑल पर क्लिक करें

टैब्स को स्पेस के साथ कैसे बदलें


3

मुझे यह समस्या थी। समाधान: समस्या लाइन, 4, 6 या 8 स्थानों से पहले आपका 'टैब' है। आपको उन्हें मिटा देना चाहिए और टीएबी डालना चाहिए। '\ T'। बस इतना ही।


पायथन के साथ कोडिंग करते समय TAB वर्णों का उपयोग करने की अनुशंसा नहीं की जाती है - PEP008 ( python.org/dev/peps/pep-0008 ) पढ़ें
टोनी

2

मैं नोटपैड ++ का उपयोग करता हूं और मुझे यह त्रुटि मिली है।

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

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


2

मेरी भी यही त्रुटि थी। मुझे मौजूदा * .py फ़ाइल में कई कोड लाइनें जोड़नी थीं। नोटपैड ++ में यह काम नहीं किया।

कोड लाइनों को जोड़ने और सहेजने के बाद, मुझे वही त्रुटि मिली। जब मैंने PyCharm में एक ही फ़ाइल खोली और लाइनें जोड़ीं , तो त्रुटि गायब हो गई।


1

मुझे वही त्रुटियां मिलीं, लेकिन यह पता नहीं लगा सका कि मैं क्या गलत कर रहा था।

इसलिए मैंने अपने कोड पर ऑटो-इंडेंट चलाकर और मशीन को मेरी गलती को ठीक करने की अनुमति देकर इसे ठीक किया।

अगर कोई सोच रहा है कि मैंने ऐसा कैसे किया। सरल। व्यर्थ जाना। जी = जीजी में टाइप करें।

यह स्वचालित रूप से सब कुछ ठीक कर देगा। सौभाग्य :)


1

आपकी समस्या आपकी संपादक सीमाओं / कॉन्फ़िगरेशन के कारण है। कुछ संपादक समस्या से निपटने के लिए आपको उपकरण प्रदान करते हैं:

  1. रिक्त स्थान में टैब परिवर्तित करना

    उदाहरण के लिए, यदि आप स्टानी के पायथन संपादक का उपयोग कर रहे हैं, तो आप इसे सहेजने के लिए इसे कॉन्फ़िगर कर सकते हैं।

  2. रिक्त स्थान को टैब में परिवर्तित करना

यदि आप ActiveState Komodo का उपयोग कर रहे हैं तो आपके पास अपने कोड को 'सूचित' करने का एक उपकरण है। जैसा कि अन्य लोग पहले ही बता चुके हैं, यह अच्छा विचार नहीं है।

एक्लिप्स के पयदेव फंक्शन "कन्वर्ट टैब्स टू स्पेस-टैब्स" और "स्पेस-टैब्स को टैब्स में कन्वर्ट" प्रदान करता है।


1

यदि आपका संपादक खोज करते समय टैब को नहीं पहचानता है और (जैसे SciTE) को बदल देता है, तो आप वर्ड में कोड पेस्ट कर सकते हैं और Ctr-H और ^ t का उपयोग करके खोज कर सकते हैं, जो तब टैब को ढूंढता है जिसे 4 स्थानों से बदला जा सकता है।


1

इस प्रश्न का एक डुप्लिकेट था यहाँ लेकिन मुझे लगा कि मैं आधुनिक संपादकों और उनके द्वारा प्रदान की जाने वाली सुविधाओं की विशाल सरणी के साथ एक दृश्य पेश करूंगा। अजगर कोड के साथ, किसी भी चीज को एक .pyफ़ाइल में रखने की आवश्यकता होती है, या तो सभी को टैब कुंजी का उपयोग करके या रिक्त स्थान के द्वारा सभी को एकीकृत करने की आवश्यकता होती है। कन्वेंशन एक इंडेंटेशन के लिए चार स्थानों का उपयोग करना है। अधिकांश संपादकों में संपादक पर नेत्रहीन रूप से दिखाने की क्षमता है कि क्या कोड रिक्त स्थान या टैब के साथ इंडेंट किया जा रहा है, जो डीबगिंग के लिए बहुत मदद करता है। उदाहरण के लिए, परमाणु के साथ, वरीयताएँ और फिर संपादक पर जाकर आप निम्नलिखित दो विकल्प देख सकते हैं:

टैब और रिक्त स्थान दिखाने के लिए परमाणु संपादक

फिर यदि आपका कोड रिक्त स्थान का उपयोग कर रहा है, तो आपको छोटे डॉट्स दिखाई देंगे जहाँ आपका कोड इंडेंट किया गया है:

यहां छवि विवरण दर्ज करें

और अगर यह टैब का उपयोग करने के लिए प्रेरित है, तो आपको कुछ इस तरह दिखाई देगा:

यहां छवि विवरण दर्ज करें

अब यदि आपने गौर किया है, तो आप देख सकते हैं कि टैब का उपयोग करते समय, बाईं ओर अधिक त्रुटियां / चेतावनियाँ होती हैं, यह कुछepep8 नामक चीज के कारण होता है pep8 प्रलेखन , जो मूल रूप से अजगर के लिए एक समान शैली मार्गदर्शिका है, ताकि सभी डेवलपर्स को यह कोड मिल जाए समान मानक और उपस्थिति, जो अन्य लोगों के कोड को समझने की कोशिश करते समय मदद करता है, यह pep8 में है जो टैब के बजाय इंडेंट करने के लिए रिक्त स्थान के उपयोग का पक्षधर है। और हम संपादक को दिखा सकते हैं कि pep8 चेतावनी कोड से संबंधित चेतावनी है W191,

मुझे आशा है कि उपरोक्त सभी समस्याएँ आपको उस समस्या की प्रकृति को समझने में मदद करती हैं जो आप कर रहे हैं और भविष्य में इसे कैसे रोकें।


0

कभी-कभी, tabइंडेंट करते समय गड़बड़ करता है। एक तरीका स्पष्ट रूप से tabऔर का उपयोग करना हैbackspace सही ढंग से करने के लिए कोड को इंडेंट।

दूसरा तरीका space 4 बार उपयोग करना है (यह निर्भर करता है कि आप कितना इंडेंट करना चाहते हैं)।

एक अजीब तरीका जो मेरे लिए काम करता है जब कुछ और काम नहीं करता है, जिस भी लाइन पर मुझे त्रुटि मिल रही है, मैं backspacedउस लाइन को पिछली लाइन पर ले जाता हूं और फिर दबाया जाता हैenter । यह स्वचालित रूप से लाइन को सही स्थिति के लिए प्रेरित करता है और मुझे उसके बाद कोई त्रुटि नहीं मिल रही थी।

उम्मीद है, यह मदद करनी चाहिए।


0

मेरे पास एक ही समस्या थी और इसे पायथन स्क्रिप्ट का उपयोग करके ठीक करें। आशा है कि यह दूसरों की मदद करे।

यह इंडेंटिंग कोड के लिए टैब और रिक्त स्थान का उपयोग करने के कारण है। इस स्क्रिप्ट में मैं प्रत्येक टैब को चार स्थानों से प्रतिस्थापित करता हूं।

input_file = "source code path here"  # e.g. source.py
output_file = "out put file path here"  # e.g out.py
with open(input_file, 'r') as source:
    with open(output_file, 'a+') as result:
        for line in source:
            line = line.replace('\t', '    ')
            result.write(line)

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


0

उपयोग, अजगर के लिए आइडल, या python3 के लिए आइडल 3।


2
यह आपके लिए कैसे / क्यों काम करता है, इस पर थोड़ा विस्तार उपयोगी रहा होगा।
तस्लीम ओसेनी

समस्या क्षेत्र में रिक्त स्थान के बजाय टैब के कारण है। आइडल पूरे क्षेत्र को अछूता कर सकता है और समस्या को ठीक कर सकता है (बस मेनू फॉर्मेट से अनटैबिफाइ चुनें)।
सिम

0

विम संपादक का उपयोग करके इसको हल करना

  1. टर्मिनल खोलें ( Ctrl+ Alt+ T)।
  2. उस निर्देशिका पर जाएं जहां फ़ाइल स्थित है ( cd <path_to_your_directory>)। उदाहरण के लिए: cd /home/vineeshvs/work
  3. फ़ाइल को विम ( vim <file_name>) में खोलें । उदाहरण के लिए: vim myfile.txt
  4. [वैकल्पिक कदम] विम में हाइलाइटिंग खोज कीवर्ड सक्षम करें ( ESC :set hlsearch)
  5. उस पंक्ति पर जाएं जहां आपको यह समस्या है ( ESC :<line_number>)। Ex: एक बार बटन :53दबाने के बाद Vim एडिटर में ESC
  6. विम ( :.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc) में रिक्त स्थान की आवश्यक संख्या का उपयोग करके टैब बदलें । Ex: टैब को निम्न कमांड का उपयोग करके चार स्थानों से बदला जाएगा: एक बार बटन :.,$s/\t/ /gcदबाने के बाद ESC)। यह प्रक्रिया संवादात्मक है। आप yटैब को रिक्त स्थान से बदलने और nकिसी विशेष प्रतिस्थापन को छोड़ने के लिए दे सकते हैं । ESCआवश्यक प्रतिस्थापन के साथ किए जाने पर दबाएँ ।

0

मैं अजीब तरह से अपनी एक .py फ़ाइलों के साथ एक समान मुद्दे में भाग गया। मैंने बस फ़ाइल को Pycharm में खोला और दबाया Option+ Command+ Lजो एक बार में फ़ाइल सामग्री को सही ढंग से प्रारूपित करता है।

मुझे संदेह है कि मुझे परेशानी हो रही थी क्योंकि मैंने इस विशेष .py फ़ाइल को जुपाइटर प्रयोगशालाओं के माध्यम से कोडित किया था, जो कि उदात्त पाठ या पाइक्रोम की मेरी सामान्य पसंद के विपरीत थी और इसलिए कुछ छिपे हुए इंडेंटेशन मुद्दों में भाग गया, जिनमें से कई जवाब यहां दिए गए हैं


0

वैसे मुझे भी यही समस्या थी और मैंने महसूस किया कि समस्या यह है कि मैंने एक और अजगर संपादक से लेकर उदात्त तक कोड की नकल की।

मैं ज्यूपिटर नोटबुक के साथ काम कर रहा था और फिर मैंने कोड को उदात्त में कॉपी किया। जाहिरा तौर पर जब आप विशिष्ट संशोधन करते हैं (जैसे कार्यों में बढ़ते कोड) तो इंडेंटेशन गड़बड़ हो जाता है और यही वह जगह है जहां से समस्या आती है।

तो बस एक संपादक से चिपके रहें। यदि आप ऐसा करते हैं, तो आपको कोई समस्या नहीं होगी।


0

pylintइसका उपयोग करें आपको आपको एक विस्तृत रिपोर्ट देनी होगी कि आपको कितने स्थानों की आवश्यकता है और कहां है।


0

यदि आप ATOM का उपयोग करते हैं:

मेनू पर जाएं: संकुल -> व्हाइटस्पेस -> सभी टैब को रिक्त स्थान में बदलें


0

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


-2

इंडेंटेड बिट्स को हाईलिग्ट करें और फिर टैब पर क्लिक करें। वे तो लगातार हो जाएगा :)


2
यह PEP 8 , विहित पायथन शैली गाइड के साथ संघर्ष करता है , जो 4 स्थानों की सिफारिश करता है। टैब का उपयोग करने के लिए लोगों को सलाह देना अधिक असंगत है।
औरोरा ०१०१

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