¿Una excepción con solo un aumento tiene algún uso?

Por ejemplo, aquí hay un código de django.templates.loader.app_directories.py. [1]

try: yield safe_join(template_dir, template_name) except UnicodeDecodeError: # The template dir name was a bytestring that wasn't valid UTF-8. raise 

Si detecta una excepción solo para volver a elevarla, ¿para qué sirve?

[1] http://code.djangoproject.com/browser/django/trunk/django/template/loaders/app_directories.py

En el código al que está vinculado hay otro controlador de excepciones adicional:

 try: yield safe_join(template_dir, template_name) except UnicodeDecodeError: # The template dir name was a bytestring that wasn't valid UTF-8. raise except ValueError: # The joined path was located outside of template_dir. pass 

Dado que UnicodeDecodeError es una subclase de ValueError , el segundo controlador de excepciones haría que cualquier UnicodeDecodeError sea ​​ignorado. Parece que este no sería el efecto deseado y para evitarlo, el primer controlador procesa explícitamente UnicodeDecodeError . Entonces, con ambos manejadores juntos, un ValueError solo se ignora si no es un UnicodeDecodeError .

No se me ocurre nada, excepto si está depurando ese código fuente y establece un punto de interrupción en la statement de raise .

En rigor, es innecesario.

Algunas posibilidades:

  1. Para fines de documentación, solo para explicitar las excepciones esperadas
  2. Como marcador de posición para un futuro (o pasado) manejo más serio antes de volver a subir

El uso más común es propagar alguna excepción particular y manejar todo el rest. Puede encontrar una gran cantidad de ejemplos para propagar KeyboardInterrupt y SystemExit (p. Ej., asyncore en asyncore source): es conveniente que los servidores asyncore sesión y continúen en caso de error en el controlador de solicitudes, pero no debe capturar KeyboardInterrupt para salir en SIGINT .