SystemExit se lanza por sys.exit() para indicar que el intérprete debe terminar. Es una subclase de BaseException, no de Exception, por lo que evita la mayoría de los manejadores de excepciones. Lleva un código de salida que el sistema operativo usa para reportar éxito o fallo.
Por qué ocurre
- •sys.exit() se llama explícitamente para terminar el programa.
- •Una librería o framework llama a sys.exit() en un error irrecuperable.
- •argparse o herramientas similares llaman a sys.exit(2) cuando falla el análisis de argumentos.
- •Los ejecutores de pruebas capturan SystemExit para reportar el código de salida sin terminar realmente.
Ejemplos
Código que causa el error
import sys
def main():
sys.exit(1)
try:
main()
except Exception as e:
print(f"Caught: {e}") # never runsError en la terminal
# The process exits with code 1 and nothing is printed. # SystemExit is NOT a subclass of Exception.
Cómo solucionarlo
Captura SystemExit solo si necesitas realizar limpieza o registrar el código de salida. Usa un bloque finally para garantizar la limpieza. Si quieres devolver un estado de error desde una función sin salir, lanza una excepción personalizada en lugar de llamar a sys.exit().
Código corregido
import sys
def main():
sys.exit(1)
try:
main()
except SystemExit as e:
print(f"Exit called with code: {e.code}")
# Optionally re-raise or handle cleanup hereErrores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis