Come posso correggere l'errore "rientro imprevisto" in Python?
Come posso correggere l'errore "rientro imprevisto" in Python?
Risposte:
Python usa la spaziatura all'inizio della riga per determinare l'inizio e la fine dei blocchi di codice. Gli errori che puoi ottenere sono:
Rientro imprevisto. Questa riga di codice ha più spazi all'inizio di quella precedente, ma quella prima non è l'inizio di un sottoblocco (ad esempio if / while / for statement). Tutte le righe di codice in un blocco devono iniziare esattamente con la stessa stringa di spazi. Per esempio:
>>> def a():
... print "foo"
... print "bar"
IndentationError: unexpected indent
Questo è particolarmente comune quando si esegue Python in modo interattivo: assicurati di non inserire spazi aggiuntivi prima dei tuoi comandi. (Molto fastidioso quando si copia e incolla il codice di esempio!)
>>> print "hello"
IndentationError: unexpected indent
Unindent non corrisponde ad alcun livello di rientro esterno. Questa riga di codice ha meno spazi all'inizio di quella precedente, ma ugualmente non corrisponde a nessun altro blocco di cui potrebbe far parte. Python non può decidere dove andare. Ad esempio, di seguito, la stampa finale dovrebbe far parte della clausola if o no?
>>> if user == "Joey":
... print "Super secret powers enabled!"
... print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level
Previsto un blocco rientrato. Questa riga di codice ha lo stesso numero di spazi all'inizio di quella precedente, ma l'ultima riga doveva iniziare un blocco (ad esempio if / while / for istruzione, definizione di funzione).
>>> def foo():
... print "Bar"
IndentationError: expected an indented block
Se si desidera una funzione che non fa nulla, utilizzare il "no-op" Comando passaggio :
>>> def foo():
... pass
È consentito combinare tabulazioni e spazi (almeno sulla mia versione di Python), ma Python presume che le tabulazioni siano lunghe 8 caratteri, che potrebbero non corrispondere al tuo editor. Dì solo "no" alle schede. La maggior parte degli editor consente che vengano sostituiti automaticamente da spazi.
Il modo migliore per evitare questi problemi è usare sempre un numero consistente di spazi quando indentate un sottoblocco e idealmente utilizzare un buon IDE che risolva il problema per voi. Ciò renderà anche il tuo codice più leggibile.
except
parte di una try
clausola. Il codice sembra corretto (in quanto la riga non rientrata è pensata per essere fuori dal try
blocco) ma Python lo segnala come un errore di "rientro imprevisto". Il except
pass
In Python, la spaziatura è molto importante, questo fornisce la struttura dei blocchi di codice. Questo errore si verifica quando si confonde la struttura del codice, ad esempio in questo modo:
def test_function() :
if 5 > 3 :
print "hello"
Potresti anche avere una combinazione di tabulazioni e spazi nel tuo file.
Ti suggerisco di utilizzare un editor sensibile alla sintassi Python come PyScripter o Netbeans
Attiva gli spazi bianchi visibili nell'editor che stai utilizzando e attiva la sostituzione delle tabulazioni con spazi.
Sebbene sia possibile utilizzare le schede con Python mescolare le schede e lo spazio di solito porta all'errore che stai riscontrando. La sostituzione delle tabulazioni con 4 spazi è l'approccio consigliato per scrivere codice Python.
Se stai scrivendo Python usando Sublime e ricevi errori di rientro,
visualizza -> rientro -> converti il rientro in spazi
Il problema che sto descrivendo è causato dall'editor di testo Sublime. Lo stesso problema potrebbe essere causato anche da altri editor. Essenzialmente, il problema ha a che fare con Python che vuole trattare i rientri in termini di spazi rispetto a vari editor che codificano i rientri in termini di tabulazioni.
Assicurati di utilizzare l'opzione "inserisci spazi invece di tabulazioni" nel tuo editor. Quindi puoi scegliere se desideri una larghezza di tabulazione, ad esempio 4. Puoi trovare queste opzioni in gedit sotto modifica -> preferenze -> editor.
linea di fondo: USA SPAZI non tabulazioni
Questo errore può verificarsi anche quando si incolla qualcosa nell'interprete Python (terminale / console).
Nota che l'interprete interpreta una riga vuota come la fine di un'espressione, quindi se incolli qualcosa come
def my_function():
x = 3
y = 7
l'interprete interpreterà la riga vuota prima y = 7
come la fine dell'espressione, cioè che hai finito di definire la tua funzione, e la riga successiva - y = 7
avrà un rientro errato perché è una nuova espressione.
Un problema che non sembra essere stato menzionato è che questo errore può sorgere a causa di un problema con il codice che non ha nulla a che fare con il rientro.
Ad esempio, prendi il seguente script:
def add_one(x):
try:
return x + 1
add_one(5)
Ciò restituisce IndentationError: unexpected unindent
quando il problema è ovviamente except:
un'istruzione mancante .
Il mio punto: controlla il codice sopra dove viene segnalato il rientro inaspettato!
Se il rientro sembra a posto, dai un'occhiata per vedere se il tuo editor ha un'opzione "Visualizza spazi bianchi". Abilitare questo dovrebbe consentire di trovare dove sono mescolati spazi e tabulazioni.
C'è un trucco che ha sempre funzionato per me:
Se hai un rientro imprevisto e vedi che tutto il codice è perfettamente rientrato, prova ad aprirlo con un altro editor e vedrai quale riga di codice non è rientrata.
Mi è successo quando ho usato vim, gedit o editor del genere.
Prova a utilizzare solo 1 editor per il tuo codice.
Copia semplicemente lo script e metti sotto "" "l'intero codice" "" ...
specifica questa riga in una variabile .. come,
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..
ora esegui questo codice, nell'editor Sublime usando ctrl + b, ora stamperà il codice rientrato nella console. questo è tutto
Tutto quello che devi fare è rimuovere spazi o tabulazioni dall'inizio dei seguenti codici
from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)
Esegui il seguente comando per risolverlo:
autopep8 -i <filename>.py
Questo aggiornerà il tuo codice e risolverà tutti gli errori di indentazione :)
Spero che questo risolva
Notepad ++ stava dando lo spazio di tabulazione corretto, ma il problema del rientro è stato finalmente trovato nell'editor di testo Sublime.
Usa l'editor di testo Sublime e vai riga per riga
Il rientro in Python è importante e questo non è solo per la leggibilità del codice, a differenza di molti altri linguaggi di programmazione. Se c'è uno spazio bianco o una tabulazione nel codice tra comandi consecutivi, python darà questo errore poiché Python è sensibile a questo. È probabile che riceviamo questo errore quando copiamo e incolliamo il codice su qualsiasi Python. Assicurati di identificare e rimuovere questi spazi utilizzando un editor di testo come Notepad ++ o rimuovi manualmente gli spazi bianchi dalla riga di codice in cui ricevi un errore.
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]]
Grazie!