को संरक्षित कैसे करें मैं एक फ़ंक्शन पर लागू करने के लिए एक सजावट लिख रहा हूं। इसे किसी भी अपवाद को पकड़ना चाहिए, और फिर मूल अपवाद संदेश के आधार पर एक कस्टम अपवाद उठाएं। (ऐसा इसलिए है क्योंकि सूड एक सामान्य वेबफॉल्ट अपवाद फेंकता है, जिसका संदेश मैं वेब सेवा द्वारा अपवाद को अपवादित करता हूं और इसे दर्पण करने के लिए पाइथन अपवाद बढ़ाता हूं।)पायथन: अपवाद सजावट। Stacktrace
हालांकि, जब मैं रैपर में कस्टम अपवाद बढ़ाता हूं, तो मैं चाहते हैं कि स्टैकट्रैक उस कार्य को इंगित करे जो मूल वेबफॉल्ट अपवाद उठाता है। जो मैंने अभी तक सही अपवाद उठाया है (यह गतिशील रूप से संदेश को पारदर्शी करता है और अपवाद वर्ग को तत्काल करता है)। मेरा प्रश्न: वेबफॉल्ट अपवाद को उठाए गए मूल फ़ंक्शन को इंगित करने के लिए मैं स्टैकट्रैक को कैसे संरक्षित कर सकता हूं?
from 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)
आप 'traceback' मॉड्यूल को देखा है:
मैं डेकोरेटर शरीर में निर्माण मूल का पता लगाने unittests उत्पादन में मुद्रित संरक्षित करने के लिए निम्नलिखित का इस्तेमाल किया? http://docs.python.org/library/traceback.html – stderr
सजावट में लपेटते समय [functools.wrap] (https://docs.python.org/2/library/functools.html) –
संभावित डुप्लिकेट [पाइथन में "आंतरिक अपवाद" (ट्रेसबैक के साथ)? (Http://stackoverflow.com/questions/1350671/inner-exception-with-traceback-in-python) –