2009-11-11 19 views
35

अजगर में, अगर मैं एक बाइनरी फ़ाइल जो मौजूद नहीं है खोलते हैं, तो प्रोग्राम गलत और प्रिंट के साथ बाहर निकल जाता है:अपवाद संदेश (अजगर 2.6)

Traceback (most recent call last): 
    File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
    line 4, in <module> 
    pkl_file = open('monitor.dat', 'rb') 
    IOError: [Errno 2] No such file or directory: 'monitor.dat' 

मैं के साथ इस संभाल कर सकते हैं 'की कोशिश को छोड़कर' , जैसे:

try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except Exception: 
    print 'No such file or directory' 

कैच अपवाद में, मैं निम्नलिखित पंक्ति को कैसे मुद्रित कर सकता हूं?

File "C:\Python_tests\Exception_Handling\src\exception_handling.py", 
line 11, in <module> 
pkl_file = open('monitor.dat', 'rb') 

तो कार्यक्रम बाहर नहीं निकलेगा।

except Exception, e: 
    print "Couldn't do it: %s" % e 

इस पूरे ट्रैस बैक दिखाएगा::

import traceback 

# ... 

except Exception, e: 
    traceback.print_exc() 

लेकिन आप अपवाद को पकड़ने के लिए नहीं चाहते हो सकता है

उत्तर

91

यह अपवाद संदेश प्रिंट करता है। संकुचित आप आम तौर पर अपने पकड़, बेहतर, कर सकते हैं। तो आप कोशिश कर सकते हैं:

except IOError, e: 

इसके बजाए। इसके अलावा अपने अपवाद संचालन को सीमित करने, यदि आप केवल लापता फ़ाइलों के बारे में चिंतित हैं के विषय पर, उसके बाद ही खुला चारों ओर छोड़कर कोशिश डाल:

try: 
    pkl_file = open('monitor.dat', 'rb') 
except IOError, e: 
    print 'No such file or directory: %s' % e 

monitoring_pickle = pickle.load(pkl_file) 
pkl_file.close() 
+0

यह मेरे लिए काम नहीं करता है। जोचेन का जवाब था। – Josh

+0

@ जोश कि उत्तर इस तरह के समान कहते हैं। –

9

अजगर traceback मॉड्यूल है।

import traceback 
try: 
    pkl_file = open('monitor.dat', 'rb') 
    monitoring_pickle = pickle.load(pkl_file) 
    pkl_file.close() 
except IOError: 
    traceback.print_exc() 
6

सभी के लिए धन्यवाद।

यही कारण है, है कि मैं क्या जरूरत है :)

import traceback 

try: 
    # boom 
except Exception: 
    print traceback.format_exc() 
+8

जब आप कोई टिप्पणी कर रहे हों तो आपको जवाब नहीं देना चाहिए। अपने सहायकों को पुरस्कृत करने के उत्तरों में से एक को स्वीकार करें! –

+0

कृपया नेड बी के उत्तर पर एक और नज़र डालने के लिए समय दें। आपके तत्काल समस्या को हल करने के अलावा, वह कई महत्वपूर्ण बिंदु हैं जो वह बनाता है। – PaulMcG

+0

धन्यवाद, पॉल, लेकिन मुझे लगता है कि हम इस प्रश्न पर गतिविधि के अंत तक पहुंच गए हैं ... –

22

आप अपवाद वस्तु अपवाद द्वारा पारित पर कब्जा करना चाहते हैं, क्योंकि अजगर 2.6 (जो वर्तमान में दोनों का समर्थन करता है) में शुरू की गई नई स्वरूप का उपयोग शुरू करने के लिए सबसे अच्छा है यह अजगर में यह करने के लिए 3.

का एकमात्र तरीका होगा और वह है:

try: 
    ... 
except IOError as e: 
    ... 

उदाहरण:

try: 
    pkfile = open('monitor.dat', 'rb') 
except IOError as e: 
    print 'Exception error is: %s' % e 

What's New in Python 2.6 documentation पर एक विस्तृत अवलोकन देखा जा सकता है।

+2

सहायक, लेकिन इसने सवाल का जवाब नहीं दिया। शायद एक टिप्पणी के रूप में बेहतर? – Josh

संबंधित मुद्दे