Python'daki "beklenmeyen girinti" hatasını nasıl düzeltirim?
Python'daki "beklenmeyen girinti" hatasını nasıl düzeltirim?
Yanıtlar:
Python, kod bloklarının ne zaman başlayıp biteceğini belirlemek için satırın başında boşluk kullanır. Alabileceğiniz hatalar:
Beklenmeyen girinti. Bu kod satırının başlangıcında öncekinden daha fazla boşluk vardır, ancak öncekisi bir alt bloğun başlangıcı değildir (örn. İf / while / for ifadesi). Bir bloktaki tüm kod satırları tam olarak aynı boşluk dizisiyle başlamalıdır. Örneğin:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Bu özellikle etkileşimli olarak python çalıştırırken yaygındır: komutlarınızdan önce fazladan boşluk bırakmadığınızdan emin olun. (Örnek kodu kopyalayıp yapıştırırken çok can sıkıcı!)
>>> print "hello"
IndentationError: unexpected indent
Girintiyi kaldırma, herhangi bir dış girinti düzeyiyle eşleşmez. Bu kod satırı, başlangıçta öncekinden daha az boşluk içerir, ancak aynı şekilde parçası olabileceği başka herhangi bir blokla eşleşmez. Python nereye gideceğine karar veremez. Örneğin, aşağıda, son baskının if cümlesinin bir parçası olması gerekiyor mu, değil mi?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Girintili bir blok bekleniyordu. Bu kod satırı, başlangıçta öncekiyle aynı sayıda boşluğa sahiptir, ancak son satırın bir blok başlatması bekleniyordu (örn. İf / while / for ifadesi, işlev tanımı).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Hiçbir şey yapmayan bir işlev istiyorsanız, "işlemsiz" komut geçişini kullanın :
>>> def foo():
... pass
Sekmeleri ve boşlukları karıştırmaya izin verilir (en azından benim Python sürümümde), ancak Python sekmelerin 8 karakter uzunluğunda olduğunu varsayar ve bu, düzenleyicinizle eşleşmeyebilir. Sekmelere "hayır" demeniz yeterli. Çoğu editör, bunların otomatik olarak boşluklarla değiştirilmesine izin verir.
Bu sorunları önlemenin en iyi yolu, bir alt bloğa girinti yaparken daima tutarlı sayıda boşluk kullanmak ve ideal olarak sorunu sizin için çözen iyi bir IDE kullanmaktır. Bu aynı zamanda kodunuzu daha okunaklı hale getirecektir.
except
bir kısmını eksiktir try
. Kod doğru görünür (girintisiz satırın try
bloğun dışında olması amaçlanmıştır ) ancak Python bunu 'beklenmedik girinti' hatası olarak bildirir. Bu sorun except
, belki pass
( burada olduğu gibi )
Python'da boşluk çok önemlidir, bu da kod bloklarınızın yapısını verir. Bu hata, kod yapınızı şu şekilde bozduğunuzda ortaya çıkar:
def test_function() :
if 5 > 3 :
print "hello"
Dosyanızda çeşitli sekmeler ve boşluklar da olabilir.
PyScripter veya Netbeans gibi python sözdizimine duyarlı bir düzenleyici kullanmanızı öneririm
Kullandığınız düzenleyicide görünür beyaz alanı açın ve sekmeleri boşluklarla değiştir seçeneğini açın.
Sekmeleri Python karıştırma sekmeleri ile kullanabilirsiniz ve boşluk genellikle yaşadığınız hataya yol açar. Sekmeleri 4 boşlukla değiştirmek, Python kodu yazmak için önerilen yaklaşımdır.
Sublime kullanarak Python yazıyorsanız ve girinti hataları alıyorsanız,
görünüm -> girinti -> girintiyi boşluklara dönüştür
Açıkladığım sorun Sublime metin düzenleyicisinden kaynaklanıyor. Aynı sorun diğer editörlerden de kaynaklanıyor olabilir. Esasen, mesele, girintileri sekmeler açısından kodlayan çeşitli editörlere karşı boşluklar açısından girintileri ele almak isteyen Python ile ilgilidir.
Düzenleyicinizde "sekme yerine boşluk ekle" seçeneğini kullandığınızdan emin olun. Daha sonra, örneğin 4'lük bir sekme genişliği istediğinizi seçebilirsiniz. Bu seçenekleri gedit'te düzenle -> tercihler -> düzenleyici altında bulabilirsiniz.
alt satır: Boşlukları sekme değil KULLANIN
Bu hata, Python yorumlayıcısına (terminal / konsol) bir şey yapıştırırken de ortaya çıkabilir.
Yorumlayıcının boş bir satırı bir ifadenin sonu olarak yorumladığına dikkat edin, bu nedenle
def my_function():
x = 3
y = 7
yorumlayıcı önceki boş satırı y = 7
ifadenin sonu olarak yorumlayacaktır , yani işlevinizi tanımlamayı bitirmişsinizdir ve sonraki satır - y = 7
yeni bir ifade olduğu için yanlış girintiye sahip olacaktır.
Belirtilmemiş gibi görünen bir sorun, bu hatanın, girintiyle ilgisi olmayan koddaki bir sorun nedeniyle ortaya çıkabilmesidir.
Örneğin, aşağıdaki komut dosyasını alın:
def add_one(x):
try:
return x + 1
add_one(5)
Bu IndentationError: unexpected unindent
, sorun elbette eksik bir except:
ifade olduğunda bir döndürür .
Demek istediğim: Beklenmeyen (un) girintinin bildirildiği yukarıdaki kodu kontrol edin!
Girinti düzgün görünüyorsa, editörünüzde "Beyaz Boşluğu Görüntüle" seçeneği olup olmadığına bakın. Bunu etkinleştirmek, boşlukların ve sekmelerin nerede karıştırıldığını bulmaya izin vermelidir.
Benim için her zaman işe yarayan bir numara var:
Eğer beklenmedik bir girinti varsa ve tüm kodun mükemmel bir şekilde girintili olduğunu görürseniz, onu başka bir düzenleyiciyle açmayı deneyin ve hangi kod satırının girintili olmadığını göreceksiniz.
Vim, gedit veya bunun gibi editörler kullanıldığında bana oldu.
Kodunuz için yalnızca 1 düzenleyici kullanmayı deneyin.
Komut dosyanızı kopyalayın ve "" "kodunuzun tamamını" "" altına koyun ...
bu satırı bir değişkende belirtin .. gibi,
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..
şimdi bu kodu Sublime Editor'da ctrl + b kullanarak çalıştırın, şimdi konsolda girintili kod yazdıracaktır. bu kadar
Yapmanız gereken tek şey, aşağıdaki kodların başından itibaren boşlukları veya sekme boşluklarını kaldırmaktır.
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Çözmek için aşağıdaki komutu çalıştırın:
autopep8 -i <filename>.py
Bu, kodunuzu güncelleyecek ve tüm girinti hatalarını çözecektir :)
Umarım bu çözülür
Notepad ++, sekme alanını doğru veriyordu ancak girinti sorunu nihayet Sublime metin düzenleyicisinde bulundu.
Sublime metin düzenleyicisini kullanın ve satır satır gidin
Python'da girinti önemlidir ve bu, diğer birçok programlama dilinin aksine, kod okunabilirliği için değildir. Kodunuzda ardışık komutlar arasında herhangi bir beyaz boşluk veya sekme varsa, Python bu hatayı verecektir çünkü Python buna duyarlıdır. Herhangi bir Python'a kod kopyalayıp yapıştırdığımızda bu hatayı almamız muhtemeldir. Notepad ++ gibi bir metin düzenleyici kullanarak bu boşlukları belirlediğinizden ve kaldırdığınızdan emin olun veya hata aldığınız kod satırındaki beyaz boşluğu manuel olarak kaldırın.
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]]
Teşekkürler!