Quando compilo o código Python abaixo, recebo
IndentationError: unindent não corresponde a nenhum nível de recuo externo
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
Por quê?
python
indentation
cbrulak
fonte
fonte
View > Indentation > Intent Using Spaces
Respostas:
Outros pôsteres provavelmente estão corretos ... pode haver espaços misturados às suas guias. Tente fazer uma pesquisa e substituir para substituir todas as guias por alguns espaços.
Tente o seguinte:
fonte
IMPORTANTE : Espaços são o método preferido - consulte Recuo PEP008 e Guias ou Espaços? . (Obrigado a @Siha por isso.)
Para
Sublime Text
usuários:Defina
Sublime Text
para usar guias para recuo:View
->Indentation
->Convert Indentation to Tabs
Desmarque a
Indent Using Spaces
opção também no mesmo submenu acima. Isso resolverá imediatamente esse problema.fonte
Para verificar facilmente problemas com guias / espaços, você pode realmente fazer isso:
ou você pode simplesmente configurar seu editor corretamente, é claro :-)
fonte
Tem certeza de que não está misturando tabulações e espaços no espaço em branco do recuo? (Isso causará esse erro.)
Observe que é recomendável não usar guias no código Python. Veja o guia de estilo . Você deve configurar o Notepad ++ para inserir espaços para guias.
fonte
Sempre que encontrei esse erro, é porque de alguma forma misturei guias e espaços no meu editor.
fonte
Se você usa o editor IDLE do Python, pode fazer o que sugere em uma das mensagens de erro semelhantes:
1) selecione tudo, por exemplo, Ctrl+A
2) Vá para Formatar -> Untabify Region
3) Verifique novamente se o recuo ainda está correto, salve e execute o programa novamente.
Estou usando o Python 2.5.4
fonte
Se você estiver usando o Vim, pressione escape e digite
gg = G
Esse recuo automático tudo e limpará todos os espaços que você jogou dentro
fonte
A linha:
result = result * i
deve ser recuada (é o corpo do loop for).Ou - você misturou caracteres de espaço e tabulação
fonte
No Atom
vamos para
Em seguida, verifique novamente o recuo do arquivo:
ou
fonte
Parece ser um problema de recuo. Você não tem que coincidir com chaves em Python, mas você não tem que coincidir com níveis de recuo.
A melhor maneira de evitar problemas de espaço / tabulação é exibir caracteres invisíveis no seu editor de texto. Isso fornecerá uma maneira rápida de impedir e / ou resolver erros relacionados à indentação.
Além disso, a injeção de código copiado e colado é uma fonte comum para esse tipo de problema.
fonte
Se você usar o bloco de notas ++, faça uma "substituição" pelo modo de pesquisa estendida para encontrar \ te substitua por quatro espaços.
fonte
para usuários Atom,
Packages ->whitspace -> remove trailing whitespaces
isso funcionou para mimfonte
Apenas uma adição. Eu tive um problema semelhante com os dois recuos no Notepad ++.
Nível de recuo externo
Ir para ----> guia Pesquisar ----> toque na substituir ----> acertar o botão de opção Extensão abaixo ---> Agora substitua \ t por quatro espaços
Vá para ----> guia Pesquisar ----> toque em substituir ----> pressione o botão de rádio Estendido abaixo ---> Agora substitua \ n por nada
fonte
Eu estava usando o notebook Jupyter e tentei quase todas as soluções acima (adaptando-me ao meu cenário) sem utilidade. Depois fui linha por linha, excluí todos os espaços de cada linha e substitui por tab. Isso resolveu o problema.
fonte
Para usuários do Spyder, vá para Fonte> Corrigir recuo para corrigir o problema imediatamente
fonte
Pode ser porque a função acima não é recuada da mesma maneira. ie
fonte
Eu tive o mesmo problema ontem, foi um erro de indentação, estava usando o editor de texto sublime. levei minhas horas tentando consertá-lo e, no final, acabei copiando o código no editor de texto VI e funcionou bem. O ps python é muito sensível ao espaço em branco, não misture espaço e tabulação.
fonte
Desde que eu percebo que não tenho resposta específica para
spyder
, vou acrescentar um: Basicamente, olhar cuidadosamente para a suaif
declaração e certificar-se de tudoif
,elif
eelse
têm o mesmo espaçamento que é que eles estão na mesma linha no início da seguinte forma:fonte
Eu tinha uma função definida, mas ela não tinha nenhum conteúdo além dos comentários sobre a função ...
Ele gritou:
(observe que a linha para a qual a
^
marca aponta está vazia)-
Várias soluções:
1: Apenas comente a função
2: Adicionar comentário de função
3: Adicione uma linha que não faz nada
De qualquer forma, certifique-se de deixar claro por que é uma função vazia - para você ou seus colegas que usarão seu código
fonte
Em primeiro lugar, apenas para lembrá-lo de que existe um erro lógico, é melhor você manter o resultado = 1 ou sua saída será resultado = 0 mesmo após a execução do loop.
Em segundo lugar, você pode escrever assim:
Deixar uma linha informará ao shell python que as instruções FOR foram encerradas. Se você tem experiência no uso do shell python, pode entender por que temos que deixar uma linha.
fonte
Pelo que vale, minha docstring foi muito recuada e isso também gera o mesmo erro
IndentationError: unindent does not match any outer indentation level
fonte
Isso ocorre porque há uma mistura de guias e espaços. Você pode remover todos os espaços e substituí-los por guias.
Ou tente escrever o seguinte:
no início do código. Esta linha resolve quaisquer diferenças entre tabulações e espaços.
fonte
no meu caso, o problema era a configuração do pydev no Eclipse
fonte
Se você usar o editor Komodo, poderá fazer o que sugere em uma das mensagens de erro semelhantes:
1) selecione tudo, por exemplo, Ctrl + A
2) Vá para Código -> Untabify Region
3) Verifique novamente se o recuo ainda está correto, salve e execute o programa novamente.
Estou usando o Python 3.4.2
fonte
Se você estiver usando texto sublime para o desenvolvimento de python, poderá evitar o erro usando o pacote Anaconda. Depois de instalar o Anaconda,
fonte
Em intellij com o plugin python, Ctrl + Shift + Alt para reformatar o documento corrigiu o problema de indent / tab / spaces
fonte
Para usuários do SPYDER : estou usando o spyder 3.3.2 com python 3.7.1 e resolvi isso, definindo o recuo para usar guias, com as seguintes etapas, clique em:
Em seguida, redefino a linha "não identificada" usando a tecla Tab.
Por alguma razão, sem essa configuração, recebi o fantasma IndentationError algumas vezes.
fonte
Por exemplo:
Nesse código, a mesma situação ocorreu para mim. Apenas exclua os espaços de recuo anteriores das linhas 2 e 3 e use tab ou espaço. Nunca use os dois . Forneça recuo adequado ao escrever código em python. Para Spyder, vá para Fonte> Corrigir recuo. O mesmo vale para o VC Code e o texto sublime ou qualquer outro editor. Corrija o recuo.
fonte
Isso acontece principalmente por causa do editor. Tente alterar as guias para espaços (4). O melhor IDE ou editores amigáveis para python são pycharm, sublime, vim para linux.
Mesmo que eu também tenha encontrado o mesmo problema, mais tarde descobri que há um problema de codificação. Sugiro que você também mude seu editor.
fonte