कार्यक्रम को रोकने के बिना पूर्ण ट्रेसबैक कैसे प्रिंट करें?
जब आप किसी त्रुटि पर अपने कार्यक्रम को रोकना नहीं चाहते हैं, तो आपको उस त्रुटि को एक कोशिश / छोड़कर संभालना होगा:
try:
do_something_that_might_error()
except Exception as error:
handle_the_error(error)
पूर्ण ट्रेसबैक निकालने के लिए, हम traceback
मानक पुस्तकालय से मॉड्यूल का उपयोग करेंगे :
import traceback
और यह दिखाने के लिए कि हम पूर्ण स्टैकट्रेस प्राप्त करते हैं, एक जटिल जटिल स्टैट्रेस बनाने के लिए:
def raise_error():
raise RuntimeError('something bad happened!')
def do_something_that_might_error():
raise_error()
मुद्रण
पूर्ण ट्रेसबैक प्रिंट करने के लिए, traceback.print_exc
विधि का उपयोग करें :
try:
do_something_that_might_error()
except Exception as error:
traceback.print_exc()
कौन सा प्रिंट:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
मुद्रण से बेहतर, लॉगिंग:
हालांकि, सबसे अच्छा अभ्यास अपने मॉड्यूल के लिए एक लकड़हारा स्थापित करना है। यह मॉड्यूल का नाम पता करेगा और स्तरों को बदलने में सक्षम होगा (अन्य विशेषताओं के बीच, जैसे हैंडलर)
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
किस मामले में, आप logger.exception
इसके बजाय फ़ंक्शन चाहते हैं :
try:
do_something_that_might_error()
except Exception as error:
logger.exception(error)
कौन सा लॉग:
ERROR:__main__:something bad happened!
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
या शायद आप सिर्फ स्ट्रिंग चाहते हैं, जिस स्थिति में, आप traceback.format_exc
इसके बजाय फ़ंक्शन चाहते हैं :
try:
do_something_that_might_error()
except Exception as error:
logger.debug(traceback.format_exc())
कौन सा लॉग:
DEBUG:__main__:Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
निष्कर्ष
और तीनों विकल्पों के लिए, हम देखते हैं कि जब हमें कोई त्रुटि होती है, तो हमें वही आउटपुट मिलता है:
>>> do_something_that_might_error()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in do_something_that_might_error
File "<stdin>", line 2, in raise_error
RuntimeError: something bad happened!
print(sys.exc_info()[0]
प्रिंट करता है<class 'Exception'>
।