2011-10-20 19 views
21

Cuando se ejecuta el siguiente código (en Python 2.7.1 en un Mac con Mac OS X 10,7)Python error de instrucción return " 'retorno' fuera de la función"

while True: 
    return False 

me sale el siguiente error

SyntaxError: 'return' outside function 

He revisado cuidadosamente las pestañas y/o espacios errantes. Puedo confirmar que el código falla con el error anterior cuando uso los 4 espacios de sangría recomendados. Este comportamiento también ocurre cuando el retorno se coloca dentro de otras instrucciones de control (por ejemplo, si, para, etc.).

Cualquier ayuda sería apreciada. ¡Gracias!

+14

Lo que dice el intérprete, no está dentro de una función. Las instrucciones de control no son funciones, usted define una función con 'def'. –

+2

Probablemente estés buscando 'break'. –

+0

Yo uso 'yield', que me da el mismo error, la razón es la misma, estará en una función ... – 8090PZ

Respuesta

40

El retorno comunicado sólo tiene sentido dentro de funciones:

def foo(): 
    while True: 
     return False 
+1

Raymond, ¿obtuviste tantos puntos de repetición que tu contador retrocedió a 0? – PaulMcG

+0

@PaulMcGuire: tu comentario me confunde. –

+0

@PaulMcGuire Su cuenta solo existe desde hace tres días. – agf

11

para romper un bucle, utilice break en lugar de return.

O ponga el bucle o la construcción de control en una función, solo las funciones pueden devolver valores.

+0

Muy bien, muchas gracias @Jurgen – Jeff

12

Usa quit() en este contexto. break espera estar dentro de un bucle, y return espera estar dentro de una función.

+0

Esto funciona en caso de que simplemente quiera detener el guión, como lo haría con un retorno nulo Preferiría usar sys.exit(), porque entonces se puede especificar un estado de salida. Verifique esta pregunta: http://stackoverflow.com/questions/543309/programatically-stop-execution-of-python-script – gcucurull

1

De acuerdo con la documentación de la declaración return, return solo puede aparecer anidado sintácticamente en una definición de función. Lo mismo es cierto para yield.

Cuestiones relacionadas