दिलचस्प पोस्ट
AVPlayer स्ट्रीमिंग प्रगति जावा में दो (2) घुमावदार वर्ग के साथ डेटा कैसे साझा करें अक्षम कैसे करें "क्या आप केवल वेबपृष्ठ सामग्री को सुरक्षित रूप से दिया गया चेतावनी देखना चाहते हैं? WinRT में धागा से यूआई अपडेट करें मेमोरीस्ट्रीम रिस्पांस ऑब्जेक्ट को लिखना कैसे gwt में कैश को साफ करने के लिए? जीआईटी – मर्ज होने पर विशिष्ट प्रतिबद्धता छोड़ना मैं बेस (सुपर) वर्ग को कैसे प्रारंभ करूं? एकता: नया वर्ग उदाहरण बनाते समय शून्य एसक्यूएल क्रम संख्या स्ट्रिंग स्क्रिप्ट्स में ggplot plots Rstudio में प्रदर्शित नहीं करते हैं क्या मैं सिंगल उद्धरणों के साथ चर को प्रतिध्वनित कर सकता हूँ? मुझे त्रुटि क्यों मिलती है … अनपेक्षित अनुरोध: GET / internalapi / quotes JavaFX 2.2 में एसवीजी छवि दशमलव विभाजक के रूप में अल्पविराम और डॉट स्वीकार करें

पायथन में सिवाय / सिवाय: आप अपवादों को ठीक से कैसे अनदेखा कर सकते हैं?

जब आप अपवाद को नियंत्रित किए बिना कोशिश-छोड़कर करना चाहते हैं, तो आप इसे पायथन में कैसे करते हैं?

क्या यह करने का सही तरीका है?

try: shutil.rmtree(path) except: pass 

Solutions Collecting From Web of "पायथन में सिवाय / सिवाय: आप अपवादों को ठीक से कैसे अनदेखा कर सकते हैं?"

 try: doSomething() except: pass 

या

 try: doSomething() except Exception: pass 

अंतर यह है कि, पहला भी KeyboardInterrupt SystemExit , SystemExit और उस तरह की चीजें भी पकड़ेगा, जो सीधे exceptions.BaseException से प्राप्त होते हैं। exceptions.BaseException , exceptions.Exception नहीं। exceptions.Exception
विवरण के लिए दस्तावेज़ीकरण देखें:

जब आप अपवाद को संभालने के बिना केवल एक प्रयास पकड़ना चाहते हैं, तो आप इसे पायथन में कैसे करते हैं?

यह "हैंडलिंग" से तुम्हारा क्या मतलब है पर निर्भर करता है।

यदि आप कोई कार्रवाई किए बिना इसे पकड़ना चाहते हैं, तो आपके द्वारा पोस्ट किया गया कोड काम करेगा

यदि आप का मतलब है कि आप अपवाद को स्टैक तक जाने के बिना अपवाद पर कार्रवाई करना चाहते हैं, तो आप ऐसा कुछ चाहते हैं:

 try: do_something() except: handle_exception() raise #re-raise the exact same exception that was thrown 

आम तौर पर यह सबसे अच्छा अभ्यास माना जाता है, केवल उन त्रुटियों को shutil.rmtree आप रुचि रखते हैं। shutil.rmtree के मामले में। shutil.rmtree यह शायद OSError :

 >>> shutil.rmtree("/fake/dir") Traceback (most recent call last): [...] OSError: [Errno 2] No such file or directory: '/fake/dir' 

यदि आप चुपचाप उस त्रुटि की अनदेखी करना चाहते हैं, तो आप ऐसा करेंगे:

 try: shutil.rmtree(path) except OSError: pass 

क्यूं कर? कहें कि आप (किसी तरह) अकस्मात फ़ंक्शन को एक स्ट्रिंग के बजाय एक पूर्णांक प्रदान करते हैं, जैसे:

 shutil.rmtree(2) 

यह त्रुटि "प्रकार त्रुटि : यूनिकोड को कोर्सिंग: स्ट्रिंग या बफर की ज़रूरत है," पाया जाएगा – आप संभवत: उस पर ध्यान न दें, जो डिबग करना मुश्किल हो सकता है

यदि आप निश्चित रूप से सभी त्रुटियों को अनदेखा करना चाहते हैं, तो except: , Exception except: पकड़ें except: कथन फिर, क्यों?

कोई अपवाद निर्दिष्ट नहीं करता हर अपवाद SystemExit है, जिसमें SystemExit अपवाद शामिल है, उदाहरण के लिए sys.exit() का उपयोग करता है:

 >>> try: ... sys.exit(1) ... except: ... pass ... >>> 

निम्न की तुलना करें, जो सही तरीके से बाहर निकलता है:

 >>> try: ... sys.exit(1) ... except Exception: ... pass ... shell:~$ 

यदि आप कभी भी बेहतर व्यवहार कोड लिखना चाहते हैं, तो OSError अपवाद विभिन्न त्रुटियों का प्रतिनिधित्व कर सकता है, लेकिन उपरोक्त उदाहरण में हम केवल Errno 2 उपेक्षा करना चाहते हैं, इसलिए हम और भी अधिक विशिष्ट हो सकते हैं:

 try: shutil.rmtree(path) except OSError, e: if e.errno == 2: # suppress "No such file or directory" error pass else: # reraise the exception, as it's an unexpected error raise 

आप if e.errno == errno.ENOENT: import errno भी कर सकते हैं और if e.errno == errno.ENOENT:

सबसे पहले मैं इस धागे से जैक ओ'कोनोर का जवाब उद्धृत करता हूं। संदर्भित थ्रेड बंद हो गया, इसलिए मैं यहां लिखा है:

"यह पायथन 3.4 में आने का एक नया तरीका है:

 from contextlib import suppress with suppress(Exception): # your code 

यह प्रतिबद्ध है कि इसे जोड़ा गया है: http://hg.python.org/cpython/rev/406b47c64480

और यहां लेखक, रेमंड हेटिंगर, इस बारे में और अन्य सभी पायथन हॉटनेस के बारे में बात कर रहे हैं: https://youtu.be/OSGv2VnC0go?t=43m23s

इस के अलावा मेरा पायथन 2.7 बराबर है:

 from contextlib import contextmanager @contextmanager def ignored(*exceptions): try: yield except exceptions: pass 

तो आप इसका उपयोग Python 3.4 में पसंद करते हैं:

 with ignored(Exception): # your code 

संपूर्णता के लिए:

 >>> def divide(x, y): ... try: ... result = x / y ... except ZeroDivisionError: ... print "division by zero!" ... else: ... print "result is", result ... finally: ... print "executing finally clause" 

… अजगर ट्यूटोरियल से

यह भी ध्यान रखें कि आप इस तरह अपवाद पर कब्जा कर सकते हैं:

 >>> try: ... this_fails() ... except ZeroDivisionError as detail: ... print 'Handling run-time error:', detail 

कैसे अपवादों को ठीक से अनदेखा कर सकता है?

इसे करने के कई तरीके हैं।

हालांकि, उदाहरण के लिए एक सरल समाधान है, जो सामान्य मामले को शामिल नहीं करता है।

उदाहरण के लिए विशिष्ट:

के बजाय

 try: shutil.rmtree(path) except: pass 

यह करो:

 shutil.rmtree(path, ignore_errors=True) 

यह एक तर्क है जो shutil.rmtree लिए विशिष्ट है। आप निम्न कार्य करके इसके बारे में सहायता देख सकते हैं, और आप देखेंगे कि यह त्रुटियों पर भी कार्यक्षमता के लिए अनुमति दे सकता है।

 >>> import shutil >>> help(shutil.rmtree) 

चूंकि यह केवल उदाहरण के संकीर्ण मामले को कवर करता है, इसलिए मैं यह प्रदर्शित करता हूं कि यह कुंजीशब्द तर्क मौजूद नहीं है, तो इसे कैसे संभालना है।

सामान्य पहूंच

चूंकि उपरोक्त केवल उदाहरण के संकीर्ण मामले को शामिल किया गया है, इसलिए मैं यह प्रदर्शित करूँगा कि इन कीवर्ड तर्कों का अस्तित्व नहीं है, तो यह कैसे संभालना है।

पायथन 3.4 में नया:

आप कॉन्टेक्ट मैनेजर को आयात कर सकते हैं:

 from contextlib import suppress 

लेकिन केवल सबसे विशिष्ट अपवाद दबाएं:

 with suppress(FileNotFoundError): shutil.rmtree(path) 

आप चुपचाप एक FileNotFoundError अनदेखा करेंगे:

 >>> with suppress(FileNotFoundError): ... shutil.rmtree('bajkjbkdlsjfljsf') ... >>> 

डॉक्स से :

किसी अन्य तंत्र के साथ जो अपवादों को पूरी तरह से दबा देता है, इस संदर्भ प्रबंधक को केवल बहुत विशिष्ट त्रुटियों को कवर करने के लिए उपयोग किया जाना चाहिए, जहां चुपचाप प्रोग्राम निष्पादन के साथ जारी रहना सही काम है।

नोट करें कि suppress और FileNotFoundError केवल पायथन 3 में उपलब्ध हैं

यदि आप चाहते हैं कि आपका कोड पायथन 2 में भी काम करे, तो अगला खंड देखें:

पायथन 2 और 3:

जब आप बस अपवाद को संभालने के बिना कोशिश / छोड़ना चाहते हैं, तो आप इसे पायथन में कैसे करते हैं?

क्या यह करने का सही तरीका है?

 try : shutil.rmtree ( path ) except : pass 

पायथन 2 संगत कोड के लिए, pass एक बयान देने का सही तरीका है जिसमें कोई ऑप्शन नहीं है। लेकिन जब आप एक except BaseException: जिसमें except BaseException: , KeyboardInterrupt SystemExit और SystemExit , और सामान्य तौर पर, आप उन चीज़ों को नहीं पकड़ना चाहते हैं

वास्तव में, आपको अपवाद के नाम पर विशिष्ट होना चाहिए जैसा आप कर सकते हैं।

यहां पायथन (2) अपवाद पदानुक्रम का हिस्सा है, और जैसा कि आप देख सकते हैं, यदि आप अधिक सामान्य अपवादों को पकड़ते हैं, तो आप उन समस्याओं को छिपा सकते हैं जिन्हें आपने नहीं सोचा था:

 BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StandardError | +-- BufferError | +-- ArithmeticError | | +-- FloatingPointError | | +-- OverflowError | | +-- ZeroDivisionError | +-- AssertionError | +-- AttributeError | +-- EnvironmentError | | +-- IOError | | +-- OSError | | +-- WindowsError (Windows) | | +-- VMSError (VMS) | +-- EOFError ... and so on 

आप शायद यहां ओएसईआरआर पकड़ना चाहते हैं, और शायद आप जिस अपवाद को ध्यान नहीं रखते हैं, अगर कोई डायरेक्टरी नहीं है

हम उस विशिष्ट त्रुटि संख्या को errno पुस्तकालय से प्राप्त कर सकते हैं, और यदि हमारे पास ऐसा न हो तो उल्लसित हो:

 import errno try: shutil.rmtree(path) except OSError as error: if error.errno == errno.ENOENT: # no such file or directory pass else: # we had an OSError we didn't expect, so reraise it raise 

ध्यान दें, मूल अपवाद बढ़ाता है, जो संभवत: इस मामले में आप क्या चाहते हैं। अधिक संक्षेप में लिखा गया है, क्योंकि हमें वास्तव में अपवाद से निपटने में स्पष्ट रूप से कोड देने की ज़रूरत नहीं है:

 try: shutil.rmtree(path) except OSError as error: if error.errno != errno.ENOENT: # no such file or directory raise 

@ जब आप अपवाद को संभालने के बिना एक प्रयास पकड़ करना चाहते हैं, तो आप इसे पायथन में कैसे करते हैं?

इससे आप क्या अपवाद मुद्रित करने में मदद करेंगे: (यानी अपवाद को संभालने के बिना पकड़ने की कोशिश करें और अपवाद मुद्रित करें।)

 आयात सिस्टम
 ....
 प्रयत्न:
     कुछ करो()
 के सिवाय:
     प्रिंट "अनपेक्षित त्रुटि:", sys.exc_info () [0]

 ...

रेग, तिलोकचन

 try: doSomething() except Exception: pass else: stuffDoneIf() TryClauseSucceeds() 

एफआईआईआई और क्लॉज सभी अपवादों के बाद जा सकते हैं और अगर केवल प्रयास में कोड अपवाद पैदा नहीं करता है तो केवल चलेंगे।

अजगर में, हम अन्य भाषा के समान अपवादों को संभालते हैं लेकिन अंतर कुछ सिंटटेक्स अंतर है, उदाहरण के लिए-

 try: #Your Code in which exception can occur except <here we can put particular exception name>: #we can call that exception here also, like ZeroDivisionError() #now your code #we can put finally block also finally: #YOur Code.. 

अजगर में एक अपवाद को संभालना: यदि आपके पास कुछ संदिग्ध कोड है जो एक अपवाद बढ़ा सकता है, तो आप अपने कार्यक्रम को संदिग्ध कोड को एक कोशिश में रखकर ब्लॉक कर सकते हैं: ब्लॉक

 try: # your statements ............. except ExceptionI: # your statments............. except ExceptionII: # your statments.............. else: # your statments