“Girintilerde sekmelerin ve boşlukların tutarsız kullanımı”


221

Python 3.2'de bir uygulama oluşturmaya çalışıyorum ve her defasında girintiler için sekmeler kullanıyorum, ancak editör bile bazılarını boşluklara dönüştürüyor ve ardından çalıştırmaya çalıştığımda "girintideki sekmelerin ve boşlukların tutarsız kullanımını" yazdırıyor program.

Boşlukları sekmelere nasıl dönüştürebilirim? Bu beni delirtiyor. (Programlamaya yeni başlıyorum). Eğer benim kod üzerinde bazı genel ipuçları alabilir sevinirim, ben çok hata yaptım ben duymak mutluluk duyarız.

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

26
Bu, kod düzenleyicinizle ilgili bir sorun, gerçekten python ile ilgili değil. Sorunuzu, bunu yansıtacak şekilde değiştirmeli ve hangi düzenleyiciyi kullandığınızı belirtmelisiniz.
Jeff Mercado

3
Bunu nasıl değiştireceğiniz editörünüze bağlıdır. Bunun konu ile ilgili olduğundan bile emin değilim, süper kullanıcı için bir soru olabilir.
Lennart Regebro

Düzenleyicinizi, satırın başında görünür boşluk gösterecek şekilde değiştirin. Örneğin, düzenleyicimi kodu girintilemek için sekmeler kullandığım için şeffaf sekmeler ve görünür boşluklar gösterecek şekilde yapılandırdım. Hattın başında herhangi bir gürültü görürsem, bir veya daha fazla ekstra alan olduğunu biliyorum. Yanlış şekilde yapmakta ısrar ederseniz, düzenleyicinizi boşlukları gizleyecek ve sekmeleri gösterecek şekilde yapılandırabilirsiniz. (Evet, PEP-8'i biliyorum ama buna katılmıyorum.)
Mikko Rantalainen

Yanıtlar:


275

Sekme kullanmayın.

  1. Düzenleyicinizi girinti için 4 boşluk kullanacak şekilde ayarlayın .
  2. Tüm sekmeleri 4 boşlukla değiştirmek için bir arama yapın ve değiştirin.
  3. Düzenleyicinizin sekmeleri 8 boşluk gösterecek şekilde ayarlandığından emin olun .

Not: Sekmeler için 8 boşluğun nedeni, sekmelerin yanlışlıkla eklendiğini (boşluklar yerine sekmeler kullanan örnek kodu kopyalayıp yapıştırırken olduğu gibi) hemen fark etmenizdir.


7
Bu dogmaların arkasında herhangi bir gerekçe var mı?
RocketR

1
@Lennart Regebro, yani hiç boşluk kullanmak. Onları kullanıyorum ama bilinçsiz olarak, sekmeler benim için daha iyi görünüyor. Bu arada, Ruby programlamasında herkes 2 boşluk kullanıyor, bu yüzden herkes için tek bir kural değil.
RocketR

3
@RocketR: Cevap Python için. Yalnızca sekmeler kullanırsanız, sekmeleri 8 boşluktan başka bir şeye genişletmediğiniz sürece 8 boşluklu bir girinti elde edersiniz, bu durumda diğer editörlerde kötü görünür. Sekmeleri ve boşlukları karıştırırsanız, sekmelerin 8 boşluktan fazla genişlemesi varsa kırılabilir (soruya bakın) veya kırık görünebilir. Özetle: Girinti için sekmeleri kullanmak inanılmaz derecede kötü. Bunu asla yapmayın (gerektiren diller / dosya formatları hariç). Son.
Lennart Regebro

2
@RocketR Python, 4 boşluğun girintide kabul edilen form olduğunu açıkça belirten "iyi python stilini" listeleyen bir belge olan Pep8'e sahiptir.
Daniel Gratzer

4
"Sekmeler ve Boşluklar" spoyleri üzerindeki ilgili PEP 8 bölümüne bağlantı : ilk satır "Boşluklar tercih edilen girinti yöntemidir."
Tadhg McDonald-Jensen


43

İle BOŞTA editörü bunu kullanabilirsiniz:

  • Menü DüzenleTümünü Seç
  • Menü FormatıBölgeyi Ayrıştır
  • Editörünüzün 8 boşluğu bir sekme ile değiştirdiği varsayılarak, giriş kutusuna 8 girin.
  • Seç tuşuna bastığınızda belgenin tamamı düzeltilir.

15

Eğer kullanıyorsanız Sublime Metin Python geliştirme için, paketi Anaconda kullanarak hatayı önleyebilirsiniz. Anaconda'yı kurduktan sonra, dosyanızı Sublime Text'de açın, açık alanlara sağ tıklayın → Anaconda'yı seçin → otomatik forma tıklayın. Bitti . Veya Ctrl+ Alt+ tuşlarına basın R.


12

Genellikle insanlar boşlukla girintiyi tercih ederler. Editörler arasında daha tutarlı ve bu türden daha az uyumsuzluğa neden oluyor. Ancak, sekme ile girintiye izin verilir. Seçim senin; ancak, sekme başına 8 boşluk standardının biraz geniş olduğunu bilmelisiniz.

Sorununuzla ilgili olarak, büyük olasılıkla editörünüz dağıldı. Sekmeyi uzaya dönüştürmek gerçekten editöre bağlıdır.

Örneğin Emacs'ta 'untabify' yöntemini çağırabilirsiniz.

Komut satırında bir sed satırı kullanabilirsiniz (boşluk sayısını sizi istediğiniz gibi uyarlayın):

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

9

Yüce metin düzenleyiciyi kullanırken, kodumun bana inconsistent use of tabs and spaces in indentationhata veren bölümünü seçip şunları seçebildim:

view > indentation > convert indentation to spaces

bu da benim için sorunu çözdü.


8

Aynı hata ortaya çıktığında ne yaptım: Her şeyi ( Str+ A) seçin ve Shift+ tuşuna basın Tab. Yani artık hiçbir şey girintili değildi. Şimdi girintili olmasını istediğiniz satırlara geri dönün ve istediğiniz şekilde geri koyun.

Benim için çalıştı ...


7

Son zamanlarda aynı sorunu vardı ve ben sadece Python 3 kullandığı set olduğu gibi .py dosyasının karakter UTF-8 dönüştürmek gerektiğini öğrendim .

BTW, her zaman 4 boşluklu sekmeler kullandım, bu yüzden sorun bunlardan kaynaklanmadı.


6

Yüce Metin 3

Sublime Text olarak, WHILE düzenleme bir Python dosyası:

Sublime Text menüsü > Tercihler > Ayarlar - Sözdizimine Özgü :

Python.sublime-settings

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

5

Bu sorunu s notepad++yerine Tab4 Spaces kullanarak çözerek mümkündür :

  1. Ara -> Bul ... 'u seçin veya Ctrl+F
  2. Değiştir sekmesini seçin
  3. Arama Modu adlı kutuda Genişletilmiş'i seçin (\ n, \ r, \ t, \ 0, \ x ...)
  4. Ne bul alanında : write \ t
  5. Şununla değiştir: alanında Space4 kez basın . Bu alanda başka bir şey olmadığından emin olun.
  6. Tümünü Değiştir düğmesine tıklayın

Sekmeleri Boşluklarla değiştirme


3

Bu sorunu yaşadım. Çözüm: Sorun satırından önceki 'sekmeniz' boşluk, 4, 6 veya 8 boşluktur. Bunları silmeli ve SEKME yerleştirmelisiniz. '\' T. Bu kadar.


Python ile kodlama yaparken TAB karakterlerinin kullanılması önerilmez - PEP008'i okuyun ( python.org/dev/peps/pep-0008 )
Tony Suffolk 66

2

Notepad ++ kullanıyorum ve bu hatayı aldım.

Notepad ++ ile hem sekmenin hem de dört boşluğun aynı olduğunu göreceksiniz, ancak kodunuzu Python IDLE'a kopyaladığınızda farkı görürsünüz ve satır diğerlerinden daha fazla alana sahip olur.

Sorunu çözmek için, sekmeden önce sekmeyi sildim ve sonra dört boşluk ekledim.


2

Aynı hatayla karşılaştım. Varolan bir * .py dosyasına birkaç kod satırı eklemek zorunda kaldım. Notepad ++ ile çalışmadı.

Kod satırlarını ekleyip kaydettikten sonra aynı hatayı aldım. Aynı dosyayı PyCharm'da açıp satırları eklediğimde hata kayboldu.


1

Aynı hataları aldım ama ne yaptığımı anlayamadım.

Bu yüzden kodumda otomatik girintiyi çalıştırarak ve makinenin hatamı düzeltmesine izin vererek düzelttim.

Eğer birisi bunu nasıl yaptığımı merak ederse. Basit. Vim'e git. G = gg yazın.

Bu her şeyi otomatik olarak düzeltir. İyi şanslar :)


1

Sorununuz editör sınırlamalarınız / yapılandırmanızdan kaynaklanıyor. Bazı editörler size aşağıdaki konularda soruna yardımcı olacak araçlar sunar:

  1. Sekmeleri boşluklara dönüştürme

    Örneğin, Stani'nin Python düzenleyicisini kullanıyorsanız, kaydederken bunu yapılandırabilirsiniz.

  2. Boşlukları sekmelere dönüştürme

ActiveState Komodo kullanıyorsanız, kodunuzu 'sekme' etmek için bir aracınız vardır. Diğerlerinin zaten işaret ettiği gibi, bu iyi bir fikir değil.

Eclipse's Pydev "Sekmeleri boşluk sekmelerine dönüştür" ve "Boşluk sekmelerini sekmelere dönüştür" işlevlerini sağlar.


1

Düzenleyiciniz bir arama ve değiştirme (SciTE gibi) yaparken sekmeleri tanımıyorsa, kodu Word'e yapıştırabilir ve daha sonra 4 boşlukla değiştirilebilen sekmeleri bulan Ctr-H ve ^ t tuşlarını kullanarak arama yapabilirsiniz.


1

Orada bu sorunun bir kopyası oldu burada ama ben çağdaş editörler ve sundukları geniş özelliklere ile ilgisi manzaralıdır düşündüm. Python koduyla, bir .pydosyaya girilmesi gereken her şeyin sekme tuşuyla ya da boşluklarla girilmesi gerekir . Sözleşme dört boşluk kullanmak için bir girinti kullanmaktır. Çoğu editör, kodun boşluk veya sekme ile girintili olup olmadığını görsel olarak gösterme yeteneğine sahiptir, bu da hata ayıklamaya büyük ölçüde yardımcı olur. Örneğin, atomla, tercihlere ve ardından editörle aşağıdaki iki seçeneği görebilirsiniz:

sekmeleri ve boşlukları göstermek için atom editörü

Kodunuz boşluk kullanıyorsa, kodunuzun girintili olduğu küçük noktalar görürsünüz:

resim açıklamasını buraya girin

Sekmeler kullanılarak girintiliyse, şöyle bir şey görürsünüz:

resim açıklamasını buraya girin

Şimdi fark ederseniz, sekmeleri kullanırken, solda daha fazla hata / uyarı olduğunu görebilirsiniz, bunun nedeni temel olarak python için tek tip bir stil kılavuzu olan pep8 pep8 belgeleri olarak adlandırılan bir şeydir , böylece tüm geliştiriciler çoğunlukla aynı standart ve görünüm, diğer insanların kodunu anlamaya çalışırken, pep8'de sekmeler yerine girintili alanların kullanımını tercih eder. Ve editörü, pep8 uyarı koduyla ilgili bir uyarı olduğunu gösteren görebiliriz W191,

Umarım yukarıdakilerin tümü, yaşadığınız sorunun doğasını ve gelecekte nasıl önleneceğini anlamanıza yardımcı olur.


0

Bazen, tabgirinti yaparken karışıklık çıkarır. Tek yönlü Açıkçası kullanmaktır tabvebackspace kodu kodunu doğru girintilendirmektir.

Başka bir yol space 4 kez kullanmaktır (ne kadar girinti yapmak istediğinize bağlı olarak).

Başka bir şey işe yaramadığında benim için çalışan garip bir yol, hangi satırı hata alıyorsam, backspacedo satırı bir önceki satıra götürdüm ve sonra bastırdım enter. Satırı otomatik olarak doğru pozisyona girintilendirdi ve bundan sonra herhangi bir hata almadım.

Umarım, bu yardımcı olacaktır.


0

Aynı sorunu vardı ve aşağıdaki python komut dosyası kullanarak düzeltmek. umarım başkalarına yardım eder.

kodu girintilemek için sekmeler ve boşluklar kullanmasıdır. Bu komut dosyasında her sekmeyi dört boşlukla değiştiriyorum.

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)

Eğer yüce veya metni değiştirmek için araç veren başka bir düzenleyici kullanıyorsanız, tüm sekmeleri editörden dört boşlukla değiştirebilirsiniz.


0

Kullanın, python için Boşta veya python3 için Boşta3.


2
Bunun sizin için nasıl / neden işe yaradığına dair biraz ayrıntı yararlı olacaktır.
Taslim Oseni

Sorun, bölgedeki boşluklar yerine sekmelerden kaynaklanıyor. Boşta tüm bölgeyi ayırabilir ve sorunu düzeltebilir (Menü Formatından Untabify'ı seçmeniz yeterlidir).
simc

0

Vim düzenleyiciyi kullanarak bunu çözme

  1. Terminali açın ( Ctrl+ Alt+ T).
  2. Dosyanın bulunduğu dizine gidin ( cd <path_to_your_directory>). Örn: cd /home/vineeshvs/work.
  3. Dosyayı Vim ( vim <file_name>) içinde açın . Ör: vim myfile.txt.
  4. [İsteğe bağlı adım] Vim'de arama anahtar kelime vurgulamayı etkinleştirin ( ESC :set hlsearch)
  5. Bu sorunun yaşandığı satıra gidin ( ESC :<line_number>). Örn: düğmeye bir kez :53bastıktan sonra Vim editöründe ESC.
  6. Sekmeleri Vim ( :.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc) içinde gereken sayıda boşluk kullanarak değiştirin . Örn: Sekme, aşağıdaki komut kullanılarak dört boşlukla değiştirilir: düğmeye bir kez :.,$s/\t/ /gcbastıktan ESCsonra). Bu süreç etkileşimlidir. ySekmeyi boşluklarla değiştirmeyi ve nbelirli bir değiştirmeyi atlamayı verebilirsiniz . ESCGerekli değişikliklerle işiniz bittiğinde düğmesine basın .

0

Garip bir şekilde .py dosyalarımdan biriyle benzer bir sorunla karşılaştım. Dosyayı Pycharm'da açtım ve dosya içeriğini tek seferde doğru formatlayan Option+ Command+ tuşlarına bastım L.

Bu özel .py dosyasını, her zamanki yüce metin veya Pycharm seçimimin aksine jupyter laboratuarları aracılığıyla kodladığım için sorun yaşadığımdan şüpheliyim ve bu nedenle burada birçok yanıtın belirttiği bazı gizli girinti sorunlarıyla karşılaştım


0

Ben de aynı sorunu vardı ve ben sorunu başka bir python editörü yüce kopyalamak olduğunu fark ettim.

Jupyter notebook ile çalışıyordum ve sonra kodu yüce kopyaladım. Görünüşe göre belirli modifikasyonlar yaptığınızda (fonksiyonlarda kod taşıma gibi) girinti dağınık hale gelir ve problem buradan gelir.

Sadece bir editöre sadık kal. Bunu yaparsanız, sorun yaşamazsınız.


0

Kullanın pylintbu size nerede ihtiyaç ve kaç alanlarda hakkında ayrıntılı bir rapor verecektir.


0

ATOM kullanıyorsanız:

Menü: Paketler -> WhiteSpace -> Tüm Sekmeleri Boşluklara Dönüştür'e gidin


0

Girintileri silmeyi ve ardından sekmeye veya boşluk tuşuna 4 kez sistematik olarak basmayı deneyin. Sekme tuşunu kullanarak bir girinti yaptığımda ve sonraki satırda boşluk tuşunu kullandığımda bu genellikle bana olur.


-2

Girintili bitleri vurgulayın ve ardından sekmeleri tıklatın. Daha sonra tutarlı olacaklar :)


2
Bu , 4 boşluk öneren kanonik Python stil rehberi PEP 8 ile çakışıyor . İnsanlara sekmeleri kullanmalarını önermek daha tutarsızdır.
Aurora0001

Bu kod üzerinde PEP8 kullanan ortak çalışanlar aynı hatayla karşılaşırsa bahsetmiyorum
Thomas Matthew
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.