|Context manager con @contextmanager para transacción simuladaMedio
Ejercicio00:00

¿Quieres un reto mayor?

Resuelve en 10:00

info

Importante: Para que se registre el resultado tienes que iniciar sesión.

Context manager con @contextmanager para transacción simulada

Medio10 pts·Funciones
ruleRestricciones
  • radio_button_unchecked
    Usa @contextmanager
  • radio_button_unchecked
    Usa yield en el context manager

Enunciado

Implementa transactional(operations) usando @contextmanager de contextlib. El context manager simula una transacción: si todas las operaciones se procesan sin error, se marca como committed; si alguna es None, lanza ValueError y hace rollback.

operations es una lista de strings (o None). Las strings se acumulan en ops; si aparece None, se lanza ValueError y committed queda en False.

La función retorna {"committed": bool, "ops": list}.

Instrucciones:

  1. Decora la función generadora con @contextmanager.
  2. Usa yield para separar el setup del teardown.
  3. En transactional, itera operations: si la op es None, lanza ValueError; si no, la añade a state["ops"].
# Ejemplo de uso
print(transactional(["op1", "op2"]))
# {"committed": True, "ops": ["op1", "op2"]}

print(transactional(["op1", None, "op3"]))
# {"committed": False, "ops": ["op1"]}
Restriccionesexpand_more
  • Dificultad: Medio
  • Completa todos los test cases para obtener los 10 puntos.
  • No modificar la línea export al final del archivo.
  • Se recomienda evitar el uso de inteligencia artificial para que realmente tú practiques los ejercicios.

Puedes usar print() para depurar. Los resultados aparecen en la Consola de salida, no en el navegador.

Inicia sesión para reaccionar
Inicia sesión para reaccionar
Context manager con @contextmanager para transacción simulada — Medio | Coding Challenges · Coding Challenges