2012-01-18 11 views
8

Her şeyden önce - Kötü girilen kodla ilgili bir sorunum yok ve bu özel durumun nasıl çalıştığı hakkında bir fikrim var.Nasıl IndentationError

Bir try/except bloğu ile kod içinde IndentationError yakalamanın bir yolu varsa, sorarım? Örneğin, bir başkası tarafından yazılmış bir fonksiyon için bir test yazdığımı varsayalım. Bunu try/except bloğu ile çalıştırmak ve yapabileceği tüm uyarıları ele almak istiyorum. Biliyorum, bu en iyi örnek değil, aklıma gelen ilk. Lütfen, bir örnek üzerinde odaklanmayın, daha ziyade problem. koda

inceleyelim:

try: 
    f() 
except IndentationError: 
    print "Error" 

print "Finished" 

fonksiyonu:

def f(): 
    print "External function" 

Ve sonuç: Ben anlamak için hazırım,

External function 
Finished 

Ve bu da bir şeydir, harici fonksiyonda izdüşüm girintisi sağduydu.

def f(): 
    print "External function" 
    print "with bad indentation" 

istisna işlenmeyen geçerli:: Böyle fonksiyon görünüm zaman

Ama

print "with bad indentation" 
    ^
IndentationError: unexpected indent 

bunu başarmak için herhangi bir yolu var mı? Sanırım bu derleme meselesi ve şimdiye kadar yakalama ihtimali yok. except IndentationError herhangi bir anlam ifade ediyor mu?

+0

'IndentationError'' SyntaxError'un bir alt sınıfıdır. –

cevap

11

Evet, bu yapılabilir. Ancak, test altındaki fonksiyon farklı modülde yaşamak zorunda kalacak:

# test1.py 
try: 
    import test2 
except IndentationError as ex: 
    print ex 

# test2.py 
def f(): 
    pass 
     pass # error 

çalıştırdığınızda, bu doğru durum yakalar. Kontrolün tüm modülde aynı anda yapılması hiçbir şeye değmez; Daha ince taneli hale getirmenin bir yolu olup olmadığından emin değilim.

5

pylint gibi bir aracı kullanabilir ve bu, modülünüzü analiz edip kötü girintiyi ve diğer birçok hatayı bildirir. Modül derlendiğinde,

6

IndentationError yükseltilmiştir. Modül ilk içe aktarma üzerine derleneceğinden, bir modülü içe aktarırken, kodunu yakalayabilirsiniz. ,'u try/except'u içeren aynı modülde yakalayamazsınız, çünkü IndentationError ile Python modülü derlemeyi bitiremez ve modülde kod çalıştırılamaz.