HOWTO · Python
No hacer nada dentro de una sentencia if en Python
Aprende a usar `pass` como marcador de posición sin efecto en una rama condicional vacía y mantener válido el bloque.
En esta página
Python requiere una instrucción indentada después de una cabecera if, elif o else. Si una rama todavía no tiene ninguna acción, la instrucción pass permite dejarla sin acciones y mantener la estructura condicional sintácticamente completa. Sirve como marcador de posición deliberado, pero no omite la condición ni implementa el comportamiento que necesitas.
Qué hace pass en un bloque if
pass es una instrucción nula: cuando Python la alcanza, no realiza ninguna acción. La ejecución continúa según el flujo de control que la rodea. En una rama if, Python continúa después de la condicional cuando termina esa rama; en el cuerpo de un bucle, el control puede pasar a la siguiente iteración en vez de salir del bucle. La condición se sigue evaluando con normalidad.
Un bloque no puede quedar en blanco. Por ejemplo, escribir if ready: y poner inmediatamente después otra instrucción con el mismo nivel de indentación no es una forma válida de dejar vacía la rama. Escribe pass dentro de ella cuando intencionalmente no haya nada que hacer. La misma regla se aplica a otras instrucciones compuestas, como bucles, funciones y definiciones de clases: sus bloques necesitan una instrucción, y pass puede cumplir esa función.
Usar pass en una rama condicional
Una rama que contiene pass sigue formando parte de la condicional. Python evalúa la condición, entra en la rama correspondiente y, cuando termina esa rama, continúa después de la condicional. Se considera una rama elif cuando las condiciones anteriores son falsas, y además debe cumplirse su propia condición. Una rama else no tiene condición: solo se ejecuta cuando todas las condiciones anteriores de if y elif son falsas. pass no hace que se ejecute otra rama.
Ejecuta este ejemplo. El código y el texto visible de la salida se mantienen en inglés:
x = 10
if x > 5:
pass
else:
print("x is not greater than 5")
print("Continue with the rest of the program")
Continue with the rest of the program
Con x establecido en 10, la condición es verdadera, así que Python entra en la primera rama y ejecuta pass. Se omite el bloque else y se ejecuta el print final. La ejecución suministrada terminó correctamente con el código de salida 0 e imprimió la salida mostrada arriba. Si cambias x a 5 o a un valor menor, el bloque else se ejecuta antes de la instrucción final.
Entender la salida del ejemplo
El ejemplo usa pass únicamente en la rama donde x > 5. Esa rama no imprime nada, pero tampoco detiene el programa. El print posterior está fuera de la condicional, así que se alcanza después de que termina cualquiera de las ramas. Cuando x es 5 o menor, la rama else añade su mensaje antes de esa instrucción posterior.
Esta distinción importa al interpretar la salida: una instrucción nula en una rama no suprime las instrucciones que aparecen después de la condicional. Del mismo modo, la rama cuya condición no se cumple simplemente no se selecciona. Para cambiar lo que muestra el programa, añade la operación prevista a la rama correspondiente en vez de esperar que pass modifique la condición o afecte a otras instrucciones.
Cuándo usar pass y cuándo elegir otra instrucción
Usa pass cuando una rama deba existir, pero su implementación se haya pospuesto intencionalmente, por ejemplo, mientras bosquejas una función o decides cómo tratar una entrada determinada. Sustituye el marcador de posición por un comportamiento real cuando sepas cuál debe ser. Hasta entonces, la rama no hará nada; los nombres que la rodean o un comentario breve deberían permitir entender por qué está ahí.
pass no sirve para desactivar temporalmente código funcional durante pruebas o depuración. No conserva las instrucciones desactivadas ni hace que la rama se comporte como si su condición fuera falsa. Para controlar la ejecución al depurar, usa una condición deliberada o un depurador; para conservar código temporalmente, recurre con cuidado a un cambio apropiado en el control de versiones o a un comentario.
Elige otra instrucción cuando el programa necesite una respuesta real. Usa return para salir de una función con un resultado (o explícitamente sin valor), continue para pasar a la siguiente iteración de un bucle o break para salir de un bucle. Estas instrucciones cambian el flujo de control; pass no lo hace. Si no hace falta ninguna acción específica para una rama, considera simplificar la condicional en lugar de mantener una rama vacía.