unindent outer online not indentationerror indentacion indent español error does python indentation

python - online - indentationerror: unindent does not match any outer indentation level



Python: "Error de sangría: unindent no coincide con ningún nivel de sangría exterior" (12)

Es posible que haya pestañas y espacios mixtos en su archivo. Puede tener la ayuda de Python para verificar dichos errores con

python -m tabnanny <name of python file>

Simplemente no puedo entender qué está mal con esto ...

#!/usr/bin/env python # # Bugs.py # from __future__ import division # No Module! if __name__ != ''__main__'': print "Bugs.py is not meant to be a module" exit() # App import pygame, sys, random, math pygame.init() # Configuration Vars conf = { "start_energy": 50, "food_energy": 25, "mate_minenergy": 50, "mate_useenergy": 35, "lifespan": 300000 } class Bugs: def __init__(self): self.list = [] self.timers= {} # Names / colors for sexes self.sex = ["Male", "Female"] self.color = ["#CBCB25", "#A52A2A"] # Bug info tracking self.bugid = 0 self.buginfo = {"maxgen":0, "maxspeed":0} def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]): sex = sex if not sex == 2 else random.randint(0,1) speed = speed if not speed == 0 else random.randint(1,3) # Create new bug object self.bugs.append(BugObj(sex, speed, generation, bugid, pygame.time.get_ticks, genes)) # Make sure it has a timer if not self.timers[speed]: self.timers[speed] = 1 pygame.time.set_timer(25 + speed, 1000 / speed) # Update info tracking variables if speed > self.buginfo["maxspeed"]: self.buginfo["maxspeed"] = speed if generation > self.buginfo["maxgen"] : self.buginfo["maxgen"] = generation self.bugid += 1 def speed_count(self, speed): a = 0 for i in list[:]: if i.speed = speed: a += 1 return a class BugObj: def __init__(self, sex, speed, generation, bugid, born, genes): global conf self.sex = sex self.speed = speed self.generation = generation self.id = bugid self.born = born self.genes = genes self.died = -1 self.energy = conf["start_energy"] self.target = "None" def update(self): global conf if self.age() > conf["lifespan"]: self.die() else: f = closest_food() m = closest_mate() # If there''s a potential mate if m != 0 and self.energy > conf["mate_minenergy"]: if not self.rect.colliderect(m.rect): self.move_toward(m) self.target = "Mate: " + str(m.rect.center) else: Bugs.mate(self, m) self.target = "Mate: (Reached)" elif f != 0: if not self.rect.colliderect(f.rect): self.move_toward(f) self.target = "Food: " + str(f.rect.center) else: self.eat(f) self.target = "Food: (Reached)" else: self.target = "Resting" # Use energy self.energy -= 0 def closest_food(self): pass def closest_mate(self): pass def age(self): if self.died != -1: return pygame.time.get_ticks - self.born else: return self.died - self.born def die(self): # Remove self from the list Bugs.list.remove(self) # Turn off timer if not Bugs.speed_count(self.speed): Bugs.timers[self.speed] = 0 pygame.time.timers(25 + self.speed, 0) # Bye! del self class Food: def __init__(self) pass def update(self) pass # Update Loop while 1: ev = pygame.event.wait() speed = ev.type - 25 if speed > 24: for i in Bugs.list[:]: if i.speed = speed i.update() print "Updating bug #" + str(i.id) if speed == 0: Food.update()

Me sale lo siguiente cada vez:

File "Bugs.py" line 53 def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]): ^ Indentation Error: unindent does not match any outer indentation level


Estoy usando la versión gedit básica que viene con Ubuntu 11.10. Yo tenía el mismo error. Esto se debe principalmente cuando se mezclan espacios con pestañas.

Una buena manera de diferenciar qué líneas tienen problemas sería ir a: 1. editar 2. preferencias 3. editor 4. marcar "sangría automática" 5. aumentar la sangría a 12 o algún número grande

después de realizar el quinto paso, podrá ver las líneas de su código que están causando problemas (estas son las líneas que tienen una combinación de espacio y pestaña)

Haga la convención de código completa como solo TAB o SPACE (esto debe hacerse manualmente línea por línea)

Espero que esto ayude...


Geany tiene una opción en sus menús que dice ''Aplicar la intención predeterminada'' que reemplaza las pestañas por el número de espacios si se especifica en la configuración de Geany


Lo siento, no puedo agregar comentarios ya que mi reputación no es lo suficientemente alta: - /, así que esto tendrá que ser una respuesta.

Como varios han comentado, el código que ha publicado contiene varios (5) errores de sintaxis (dos veces = en lugar de == y faltan tres '':'').

Una vez que se corrigieron los errores de sintaxis, no tengo ningún problema, ya sea una sangría o no; por supuesto, es imposible ver si tiene pestañas y espacios combinados como lo ha sugerido otra persona, lo que probablemente sea su problema.

Pero el punto real que quería subrayar es que: tabnanny NO ES REALIZABLE: es posible que esté recibiendo un error de ''sangría'' cuando en realidad es solo un error de sintaxis.

P.ej. Lo obtuve cuando añadí un paréntesis cerrado más de lo necesario ;-)

i += [func(a, b, [c] if True else None))]

provocaría una advertencia de tabnanny para la siguiente línea.

¡Espero que esto ayude!


No olvide el uso de "" "comentarios. Estos también necesitan una sangría precisa (¡un trabajo de 1/2 hora para mí para resolver este maldito error también!)


Probablemente tenga una mezcla de espacios y pestañas en su archivo fuente original. Reemplace todas las pestañas con cuatro espacios (o viceversa) y debería ver el problema de inmediato.

Su código como pegado en su pregunta no tiene este problema, pero creo que su editor (o su navegador web, o el Desbordamiento de pila ...) podría haber hecho la conversión de pestañas a espacios sin su conocimiento.


Recomendaría revisar sus niveles de sangrado todo el tiempo. Asegúrese de que está utilizando las pestañas en todo el camino o los espacios en todo el camino, sin mezcla. He tenido problemas de sangrado impares en el pasado que han sido causados ​​por una mezcla.


Tal vez sea esta parte:

if speed > self.buginfo["maxspeed"]: self.buginfo["maxspeed"] = speed if generation > self.buginfo["maxgen"] : self.buginfo["maxgen"] = generation

Intenta eliminar el espacio extra para que se vea alineado.

Edición: de pep8

Yes: x = 1 y = 2 long_variable = 3 No: x = 1 y = 2 long_variable = 3

Trate de seguir ese estilo de codificación.


También tuve este problema con PyCharm. Subí al menú de códigos y seleccioné el código de reformateo. El problema se fue.


Tuve este mismo problema y no tenía nada que ver con las pestañas. Este fue mi código de problema:

def genericFunction(variable): for line in variable: line = variable if variable != None: return variable

Tenga en cuenta que lo anterior for está sangrado con más espacios que la línea que comienza con if . Esto es malo. Todas tus sangrías deben ser consistentes. Así que supongo que podrías decir que tenía un espacio perdido y no una pestaña extraviada.


Tuve un problema similar con IndentationError en PyCharm.

No pude encontrar ninguna pestaña en mi código, pero una vez que eliminé el código DESPUÉS de la línea con el error de sangría, todo estaba bien.

Sospecho que tenía una pestaña en la siguiente línea: sex = sex if not sex == 2 else random.randint(0,1)


USUARIOS DE IDLE PARA VISUAL STUDIO: También me encontré con este problema al mover el código directamente de IDLE a Visual Studio. Al presionar la pestaña IDLE se agregan 4 espacios en lugar de una pestaña. En IDLE, presione Ctl + A para seleccionar todo el código y vaya a Formato> Tabular región. Ahora mueva el código a Visual Studio y la mayoría de los errores deberían solucionarse. De vez en cuando habrá un código que está fuera de la pestaña, solo hay que arreglarlo manualmente.