Como capturar uma exceção em um decorador, mas permitir que o chamador também a capture?

Eu tenho uma função python que pode gerar uma exceção. O chamador captura a exceção e lida com ela. Agora eu gostaria de adicionar um decorador a essa função queAlém disso captura a exceção, realiza alguma manipulação, mas depois gera novamente a exceção para permitir que o chamador original lide com ela. Isso funciona, exceto que, quando o chamador original exibe a pilha de chamadas da exceção, ele mostra a linha no decorador onde foi gerada novamente, e não onde ocorreu originalmente. Código de exemplo:

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)

A saída é:

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

Gostaria que o decorador fosse capaz de lidar com a exceção, mas o retorno deve indicar ox = 1/0 linha ao invés doraise linha. Como posso fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion