2014-09-18 3 views
7
Python 2.7.5 (default, Feb 26 2014, 13:43:17) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> try: 
... sys.exit() 
... except: 
... print "in except" 
... 
in except 
>>> try: 
... sys.exit(0) 
... except: 
... print "in except" 
... 
in except 
>>> try: 
... sys.exit(1) 
... except: 
... print "in except" 
... 
in except 

कोशिश में काम नहीं कर रहा है sys.exit() को किसी भी सुझाव में ट्रिगर करने में सक्षम क्यों नहीं है ... !!!पायथन sys.exit

यहां पोस्ट किए गए कोड में सभी संस्करण विवरण हैं।

मैंने इसे ट्रिगर करने के लिए सभी संभावित तरीकों का प्रयास किया है, लेकिन मैं असफल रहा। यह 'छोड़कर' ब्लॉक हो जाता है।

अग्रिम धन्यवाद ..

+2

मैंने इसे डुप्लिकेट के रूप में बंद कर दिया, क्योंकि दूसरी पोस्ट में बताया गया है कि क्या गलत है और बी) इससे कैसे बचें। कंबल 'को छोड़कर:' सिस्टमएक्सिट 'को पकड़ने से बचने के लिए' अपवाद को छोड़कर 'सर्वोत्तम उपयोग पर क्लॉज एक अच्छा विचार नहीं है। –

+0

यदि आप अपवाद को ट्रिगर नहीं करना चाहते हैं तो os._exit (0) का उपयोग करें। – Back2Basics

+3

@ बैक 2 बेसिक्स: ** ** os._exit() 'पर कॉल न करें; यह सुनिश्चित करता है कि प्रोसेसर निकलने के बाद कुछ भी साफ नहीं हो जाता है। –

उत्तर

12

sys.exit() एक अपवाद है, अर्थात् SystemExit को जन्म देती है। यही कारण है कि आप except -block में उतरते हैं।

import sys 

try: 
    sys.exit() 
except: 
    print(sys.exc_info()[0]) 

यह आपको देता है::

:

<type 'exceptions.SystemExit'> 

हालांकि मैं कल्पना नहीं कर सकते कि एक ऐसा करने के लिए किसी भी व्यावहारिक कारण है, तो आप इस निर्माण का उपयोग कर सकते

इस उदाहरण देखें

import sys 

try: 
    sys.exit() # this always raises SystemExit 
except SystemExit: 
    print("sys.exit() worked as expected") 
except: 
    print("Something went horribly wrong") # some other exception got raised 
+0

क्या कोशिश ब्लॉक में ऐसा करने का कोई तरीका है। – onlyvinish

+0

कोई कारण नहीं है, क्योंकि आप जो हासिल करने का प्रयास करते हैं, वह अगले पल में 'try' और "catch" में अपवाद उठा रहा है। यह बिल्कुल अनजान है ;-) – tamasgal

+4

'अपवाद को छोड़कर' का उपयोग करें, क्योंकि 'SystemExit' सीधे' बेसएक्सप्शन 'से प्राप्त होता है। [अपवाद पदानुक्रम] देखें (https://docs.python.org/2/library/exceptions.html#exception- पदानुक्रम) – Vincent

3

पायथन विकी पर आधारित:

चूंकि exit() अंततः "केवल" अपवाद उठाता है, यह केवल मुख्य थ्रेड से कॉल होने पर प्रक्रिया से बाहर निकल जाएगा, और अपवाद को अवरुद्ध नहीं किया जाता है।

और:

जब कार्यक्रम एक संकेत है, जब एक अजगर घातक आंतरिक त्रुटि का पता चला है, या जब os._exit() कहा जाता है से मारी जाती है बाहर निकलने के समारोह नहीं बुलाया जाता है।

तो आपके कोड में एक पाइथन घातक आंतरिक त्रुटि नहीं मिली है, या os._exit() नहीं कहा जाता है।

+2

'os._exit()' स्वयं को कॉल न करें, * बस 'SystemExit' को न पकड़ें। 'Os._exit()' को कॉल करने का अर्थ है कि कुछ भी साफ़ नहीं हो जाता है। –

+0

@MartijnPieters ठीक है धन्यवाद! – Kasramvd

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