2011-12-26 11 views
26

Oto mój kod ... Otrzymuję błąd wcięcia, ale nie wiem, dlaczego się pojawia.Python IndentationError: nieoczekiwane wcięcie

->

# loop 
while d <= end_date: 
    # print d.strftime("%Y%m%d") 
    fecha = d.strftime("%Y%m%d") 
    # set url 
    url = 'http://www.wpemergencia.omie.es//datosPub/marginalpdbc/marginalpdbc_' + fecha + '.1' 
    # Descargamos fichero 
    response = urllib2.urlopen(url) 
    # Abrimos fichero 
    output = open(fname,'wb') 
    # Escribimos fichero 
    output.write(response.read()) 
    # Cerramos y guardamos fichero 
    output.close() 
    # fecha++ 
    d += delta 
+5

Mieszanka tabulatora i spacji? – taskinoor

+0

Nie ma tu "Wywołania wcięcia". Musi być gdzieś indziej w twoim kodzie, wraz z definicjami 'd' i' end_date'. Proszę podać [SSCCE] (http://sscce.org/). – Johnsyweb

+2

Każdy edytor przyzwoity ma opcję wizualnego wyświetlania spacji i kart. Użyć tego. – sbk

Odpowiedz

43

Uruchom program z

python -t script.py 

Będzie to ostrzeżenie, jeśli masz mieszane kart i spacji.

Na systemów uniksowych można zobaczyć, gdzie karty są uruchamiając

cat -A script.py 

i można automatycznie konwertować zakładki do 4 pomieszczeń za pomocą polecenia

expand -t 4 script.py > fixed_script.py 

PS. Podczas programowania należy używać edytora programowania (np. Emacs, vim), a nie edytora tekstu. Nie dostaniesz tego problemu z edytorem programowania.

PPS. W przypadku użytkowników emacs, M-xwhitespace-mode wyświetli te same informacje, co cat -A z poziomu bufora emacs!

+0

Nie to unutbu nie jest kompletne w jego/jej odpowiedzi, miałem ten sam problem i po użyciu cat -A script.py od razu widać brakujące wcięcia. Nawet jeśli kopiujesz i wklejasz i może to wyglądać jak wcięcie w twoim edytorze. W rzeczywistości tak nie jest, więc bądź ostrożny. –

7

Sprawdź, czy mieszane wypustki i przestrzenie, które jest częstym źródłem błędów wcięcia.

3

Nie można połączyć karty i spacji w celu identyfikacji. Najlepszą praktyką jest przekształcenie wszystkich kart w spacje.

Jak to naprawić? Po prostu usuń wszystkie spacje/karty przed każdą linią i przekonwertuj je równomiernie na tabulatory LUB spacje, ale nie mieszaj. Najlepsze rozwiązanie: włącz w Edytorze opcję automatycznej konwersji dowolnych zakładek na spacje.

Należy również pamiętać, że rzeczywisty problem może leżeć w liniach przed tym blokiem, a pyton zgłasza tutaj błąd z powodu wiodącego nieprawidłowego wcięcia, które nie pasuje do następujących identyfikatorów!

7

Znajdź wszystkie karty i zastąpione 4 spacjami w notatniku ++. Działa.

+0

Po upływie półtora roku od opublikowania pierwotnego pytania, nie można znaleźć niczego nowego do zasugerowania. Witamy w SO i proszę, przeczytaj poprzednie odpowiedzi, zanim opublikujesz własne. Nie powtarzaj już istniejących odpowiedzi. – Wh1T3h4Ck5

0

Wystarczy skopiować skrypt i umieścić pod „” „całego kodu«»” ...

określić ten wiersz w zmiennej .. podobnego

a = """ your entire code """ 
print a.replace(' ',' ') # first 4 spaces tab second four space from space bar 

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.. 

teraz wykonać ten kod, w sublime za pomocą ctrl + b, teraz wydrukuje wcięty kod w konsoli. to jest to