आप अजगर में अपना अपवाद हुक बना सकते हैं। नीचे कोड का उदाहरण है जिसका मैं उपयोग कर रहा हूं।
import sys
import traceback
def exceptionHandler(got_exception_type, got_exception, got_traceback):
listing = traceback.format_exception(got_exception_type, got_exception, got_traceback)
# Removing the listing of statement raise (raise line).
del listing[-2]
filelist = ["org.python.pydev"] # avoiding the debuger modules.
listing = [ item for item in listing if len([f for f in filelist if f in item]) == 0 ]
files = [line for line in listing if line.startswith(" File")]
if len(files) == 1:
# only one file, remove the header.
del listing[0]
print>>sys.stderr, "".join(listing)
और नीचे कुछ पंक्तियां हैं जिन्हें मैंने अपने कस्टम अपवाद कोड में उपयोग किया है।
sys.excepthook = exceptionHandler
raise Exception("My Custom error message.")
आप "फ़ाइल नाम" सूची में फ़ाइल नाम या मॉड्यूल नाम जोड़ सकते हैं अगर आप किसी भी अवांछित फ़ाइलों को अनदेखा करना चाहते विधि अपवाद में
। जैसा कि मैंने पाइथन pydev मॉड्यूल को अनदेखा कर दिया है क्योंकि मैं ग्रहण में pydev डीबगर का उपयोग कर रहा हूं।
ऊपर दिए गए उद्देश्य के लिए उपरोक्त मेरे मॉड्यूल में उपयोग किया जाता है। आप इसे अपने मॉड्यूल के लिए संशोधित और उपयोग कर सकते हैं।
स्रोत
2016-11-25 07:12:11
संकलित सी कोड से उठाए जाने पर raise रेखा छिपी हुई है (क्योंकि दिखाने के लिए कोई raise रेखा नहीं है)। मानक पुस्तकालयों के पायथन भागों अभी भी एक ट्रेसबैक में उठाए गए बयान दिखाएंगे। –
यदि आप 'raise' है तो अंतिम पंक्ति को बाहर करने के लिए शायद आप 'sys.excepthook' को हैक कर सकते हैं। लेकिन आम तौर पर संभव नहीं है, इसका उपयोग करें। – delnan
आप हमेशा एक उपयोगी अपवाद उठा सकते हैं। –