2012-04-20 14 views
11

Aquí está el código .:IndentationError espera un bloque sangrado

def myfirst_yoursecond(p,q): 

a = p.find(" ") 
b = q.find(" ") 
str_p = p[0:a] 
str_q = p[b+1:] 

if str_p == str_q: 
    result = True 
else: 
    result = False 
return result 

Aquí está el error:

Traceback (most recent call last): 
File "vm_main.py", line 26, in <module> 
import main 
File "/tmp/vmuser_ssgopfskde/main.py", line 22 
result = False 
^ 
IndentationError: expected an indented block 

¿Qué hay de malo en mi código?

Respuesta

28

Has mezclado pestañas y espacios. Esto puede conducir a algunos errores confusos.

me gustaría sugerir el uso de sólo pestañas o sólo espacios para el sangrado.

Usar solo espacios es generalmente la opción más fácil. La mayoría de los editores tienen una opción para convertir automáticamente pestañas en espacios. Si su editor tiene esta opción, actívela.


Como un lado, su código es más detallado de lo que debe ser. En lugar de esto:

if str_p == str_q: 
    result = True 
else: 
    result = False 
return result 

Sólo hacer esto:

return str_p == str_q 

También parecen tener un error en esta línea:

str_q = p[b+1:] 

Te dejaré para averiguar cuál es el el error es

+0

Gracias! ¡Funciona! Python no es compatible con ambas indentaciones. Suena extraño. – Sam

+0

En realidad es compatible con pestañas de 8 espacios, pero es mucho mejor limitarse a los espacios, especialmente si el código se mueve entre los editores y los sistemas (lo cual se espera) – zigg

+0

Lo siento. Lo he cambiado a q [b + 1:]. Es muy amable por tu parte ayudarme mucho. – Sam

0

Debe instalar un editor (o IDE) compatible con la sintaxis de Python. Puede resaltar el código fuente y hacer una verificación básica de formato. Por ejemplo: Eric4, Spyder, Ninjia o Emacs, Vi.

+0

Utilizo Pyscripter en Windows. Porque tengo que hacer otros trabajos en Windows, aunque me encanta usar Linux. – Sam

1

Si está utilizando un mac y texto sublime 3, esto es lo que hace.

Vaya a su /Packages/User/ y cree un archivo llamado Python.sublime-settings.

Normalmente /Packages/User está dentro de su ~/Library/Application Support/Sublime Text 3/Packages/User/Python.sublime-settings si está utilizando mac os x.

Luego pones esto en el Python.sublime-settings.

{ 
    "tab_size": 4, 
    "translate_tabs_to_spaces": false 
} 

crédito va a Mark Byer answer, sublime text 3 docs y python style guide.

Esta respuesta es sobre todo para los lectores que tenían el mismo problema y tropiezan con esto y están utilizando texto sublime 3 en Mac OS X.

6

Este error también se produce si tiene un bloque con ninguna declaración en ella

Por ejemplo:

def my_function(): 
    for i in range(1,10): 


def say_hello(): 
    return "hello" 

en cuenta que el bloque for está vacía. Puede usar la declaración pass si desea probar el código restante en el módulo.

+1

Estaba buscando una declaración similar a la declaración ':' de bash, no es fácil formular un término de búsqueda para eso; Vine aquí de inmediato, y tu respuesta se destaca por mencionar una publicación de pase que no sabía. De ahí arriba uno. Gracias. – Roadowl

0

Tengo el mismo error, esto es lo que hice para resolver el problema.

Antes de abolladuras:

enter image description here

sangría de error: espera un bloque sangrado.

Después de abolladuras:

enter image description here

funcionando bien. Después del espacio TAB.

Cuestiones relacionadas