¿Cómo puedo detectar una excepción en un decorador pero permitir que la persona que llama también la capture?

Tengo una función de Python que puede generar una excepción. La persona que llama capta la excepción y la trata. Ahora me gustaría agregar un decorador a esa función queademás capta la excepción, realiza algunas gestiones, pero luego vuelve a generar la excepción para permitir que la persona que llama original la maneje. Esto funciona, excepto que cuando el llamador original muestra la pila de llamadas de la excepción, muestra la línea en el decorador donde se volvió a generar, no donde ocurrió originalmente. Código de ejemplo:

import sys,traceback

def mydec(func):
    def dec():
        try:
            func()
        except Exception,e:
            print 'Decorator handled exception %s' % e
            raise e
    return dec

@mydec
def myfunc():
    x = 1/0

try:
    myfunc()
except Exception,e:
    print 'Exception: %s' % e
    type,value,tb = sys.exc_info()
    traceback.print_tb(tb)

El resultado es:

Decorator handled exception integer division or modulo by zero
Exception: integer division or modulo by zero
  File "allbug.py", line 20, in <module>
    myfunc()
  File "allbug.py", line 9, in dec
    raise e

Me gustaría que el decorador pueda manejar la excepción, pero el rastreo debe indicar elx = 1/0 línea en lugar de laraise línea. ¿Cómo puedo hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta