Cadena de excepciones de Python [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿"Excepción interna" (con rastreo) en Python? 9 respuestas

¿Hay una forma estándar de usar cadenas de excepción en Python? ¿Te gusta la excepción de Java 'causada por'?

Aquí hay algunos antecedentes.

Tengo un módulo con una clase de excepción principalDSError:

 class DSError(Exception):
     pass

En algún lugar dentro de este módulo habrá:

try:
    v = my_dict[k]
    something(v)
except KeyError as e:
    raise DSError("no key %s found for %s" % (k, self))
except ValueError as e:
    raise DSError("Bad Value %s found for %s" % (v, self))
except DSError as e:
    raise DSError("%s raised in %s" % (e, self))

Básicamente, este fragmento debe lanzar solo DSError y decirme qué sucedió y por qué. La cosa es que el bloque try podría lanzar muchas otras excepciones, así que preferiría si puedo hacer algo como:

try:
    v = my_dict[k]
    something(v)
except Exception as e:
    raise DSError(self, v, e)  # Exception chained...

¿Es esta forma pitónica estándar? No vi cadenas de excepción en otros módulos, ¿cómo se hace en Python?

Respuestas a la pregunta(2)

Su respuesta a la pregunta