Bir işleve uygulamak için bir dekoratör yazıyorum. Herhangi bir özel durumu yakalamalı ve özgün istisna mesajına göre özel bir istisna oluşturmalıdır. (Bunun sebebi, perdelerin web hizmeti tarafından atılan istisnayı ayrıştıran ve onu yansıtmak için bir Python istisnası geliştiren genel bir WebFault istisnası atar.)Python: İstisna dekoratör. Stacktrace nasıl korunur
Ancak, sarıcıdaki özel özel durumu kaldırdığımda, StackTrace'in orijinal WebFault istisnasını yükselten fonksiyona işaret etmesini isteyin. Şimdiye kadar sahip olduğum şey doğru istisnayı yükseltir (mesajı dinamik olarak ayrıştırır ve istisna sınıfını başlatır). Sorumu: WebTracker istisnasını yükselten orijinal işlevi işaret edecek şekilde stacktrace'i nasıl koruyabilirim?
Python 2.xfrom functools import wraps
def try_except(fn):
def wrapped(*args, **kwargs):
try:
fn(*args, **kwargs)
except Exception, e:
parser = exceptions.ExceptionParser()
raised_exception = parser.get_raised_exception_class_name(e)
exception = getattr(exceptions, raised_exception)
raise exception(parser.get_message(e))
return wraps(fn)(wrapped)
Eğer 'traceback' modül baktınız mı:
Ben unittests çıktı basılmış orijinal iz korumak için dekoratör vücutta inşa aşağıdaki kullanılan? http://docs.python.org/library/traceback.html – stderr
Bir dekoratörde sarıldığında [functools.wrap] (https://docs.python.org/2/library/functools.html) –
olası yinelemesini kullanın. ["İç istisna" (iz bırakarak) Python'da?) (Http://stackoverflow.com/questions/1350671/inner-exception-with-traceback-in-python) –