2009-06-04 17 views
5

प्रोग्राम को समाप्त करने के लिए आप पाइथन में किस कमांड का उपयोग करते हैं?एक पाइथन प्रोग्राम को समाप्त करना

यानी मूल में "अंत" के बराबर, या बाश में "छोड़ें" के बराबर।

मुझे लगता है कि "ब्रेक" आपको लूप से बाहर ले जाता है, और "छोड़ें" सभी "वर्ग" सामान से बंधे हैं जिन्हें मैं अभी तक समझ नहीं पा रहा हूं। मैं

import sys 
sys.exit() 

की कोशिश की, लेकिन यह त्रुटि निम्नलिखित को दर्शाएगी:

Traceback (most recent call last): 
    File "C:\Documents and Settings\....\Desktop\current file_hand\Python_1.py", line 131, in <module> 
    sys.exit() 
SystemExit 

इसके लिए किसी भी समाधान है।

+0

क्या आप पाइथन इंटरैक्टिव रूप से उपयोग कर रहे हैं? >>> प्रॉम्प्ट से? या एक स्क्रिप्ट चल रहा है? –

+0

एक आईडीई - आईडीईई या एक्टिव पाइथन हो सकता है - जो सब कुछ पकड़ लेता है, क्योंकि वे आपकी स्क्रिप्ट को प्रक्रिया में चलाते हैं। –

उत्तर

10

sys.exit (ERROR_CODE)

ERROR_CODE जैसे किसी तरह की त्रुटि के कारण एक सामान्य बाहर निकलें, 1 या एक निकास के लिए कुछ अन्य सकारात्मक संख्या के लिए 0 हो जाएगा उपयोगकर्ता ने गलत पैरामीटर दर्ज किए हैं।

sys.exit() "कुछ आर्किटेक्चर पर अपरिभाषित है", (हालांकि यह काम किया जब मैं अपने लिनक्स बॉक्स पर यह कोशिश की!)

official python docs पूरी तरह से इस अधिक बताते हैं।

रिटर्न सम्मेलन का पालन करने के लिए आपके सभी कार्यक्रमों और स्क्रिप्ट के लिए यह बेहद अच्छा विचार है।

उदाहरण के लिए यदि आप एक स्क्रिप्ट चलाते हैं जो डेटाबेस से कुछ डेटा पकड़ लेता है; 0 लौट रहा है और कोई आउटपुट नहीं है, इसका मतलब है कि डेटाबेस पूरी तरह से ठीक है इसमें कुछ भी नहीं है (या आपकी क्वेरी से मेल खाने वाला कुछ भी नहीं)। 1 लौट रहा है और कोई आउटपुट का मतलब है कि डेटाबेस के साथ कोई गलती नहीं है, पूरी प्रक्रिया निरस्त होनी चाहिए, क्योंकि जारी रखने के लिए अन्य सिस्टम भी दूषित हो जाएगा।

1

अपने आईडीई से एक अजगर दुभाषिया चलाने का प्रयास करें। मेरी Windows स्थापना में सरल कमांड लाइन python.exe, दोनों विकल्पों काम:

>>> import sys 
>>> sys.exit() 

या

>>> raise SystemExit 
10

sys.exit()SystemExit अपवाद को जन्म देती है।

यदि आप उस अपवाद को नहीं पकड़ते हैं तो प्रोग्राम समाप्त होता है।

आपको लगता है कि उत्पादन हो रही है के बाद से, मुझे यकीन है कि क्या हो रहा है नहीं कर रहा हूँ, लेकिन मुझे लगता है कि यह है कि आप सभी अपवादों को पकड़ने रहे हैं और उन्हें अपने मुद्रण:

try: 
    ... 
except: 
    print exception somehow 
    raise 

मामले हैं कि है, डॉन ' ऐसा मत करो। बजाय Exception पकड़ने:

... 
    except Exception: 
     ... 

इस तरह आप मतलब नहीं बातें पकड़ नहीं होगा catched जा करने के लिए (जैसे SystemExit)।

+0

यह पायथन 2.5+ के लिए सच है। हालांकि, सिस्टमएक्सिट पाइथन 2.4 और इससे पहले अपवाद से प्राप्त होता है। – Miles

+0

त्रुटि-हैंडलिंग कोड में 'अपवाद' को कभी भी पकड़ें, इसके बजाय 'मानक त्रुटि 'पकड़ें, जिससे सभी त्रुटि अपवाद प्राप्त होते हैं (कम से कम v2.0: http://docs.python.org/release/2.0/lib/module- exceptions.html)। इसके बजाय एक वापसी कथन का उपयोग करने पर – RobM

7

तुम भी सीधे बाहर निकलने के लिए विकल्प पर विचार करना चाहिए।अक्सर return कार्य करता है यदि आप किसी फ़ंक्शन में कोड लपेटते हैं। (बेहतर, वास्तव में, यह sys.exit() weirdness से बचा जाता है क्योंकि।)

def main(): 
    ...do something... 
    if something: 
     return    # <----- return takes the place of exit 
    ...do something else... 

main() 
+2

+1। रिटर्न स्टेटमेंट का उपयोग करना (रिटर्न वैल्यू के साथ या उसके बिना) का मतलब है कि आपके पायथन प्रोग्राम को इंटरेक्टिव सत्र में या किसी अन्य स्क्रिप्ट के हिस्से के रूप में इस्तेमाल किया जा सकता है। मुझे उन स्क्रिप्ट्स पर बहुत परेशान होता है जो sys.exit को कॉल करते हैं और मुझे पायथन दुभाषिया से बाहर डंप करते हैं। –

+0

+1: मैं कभी sys.exit का उपयोग नहीं करता हूं। – nosklo

1

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

import sys 
try: 
    sys.exit(return_code) 
except: 
    pass 

आपकी समस्या को ठीक करने के लिए सही तरीका को छोड़कर दूर करने के लिए है: भाग, और बदले सिर्फ अपवाद आप संभवतः उठाया जा करने की उम्मीद को पकड़ने। उदाहरण के लिए:

try: 
    # Code which could raise exceptions 
except (NameError, ValueError): 
    # Do something in case of NameError or ValueError, but 
    # ignore other exceptions (like SystemExit) 

हालांकि, अगर आप वास्तव में बाहर निकलने के लिए अपने कार्यक्रम चाहता था, निम्नलिखित कोड काम करेगा: बस सीधे खंड, के रूप में यह:

import os 
try: 
    os._exit(return_code) 
except: 
    pass 

यह को छोड़कर के साथ भी बाहर निकल जाएगा उसी प्रक्रिया के सी फ़ंक्शन को कॉल करता है जो आपकी प्रक्रिया को मारता है। यह अनुशंसित नहीं है जब तक आप नहीं जानते कि आप क्या कर रहे हैं, क्योंकि यह क्लीनअप हैंडलर या फ्लैश ओपन बफर को कॉल नहीं करेगा।

2
sys.exit() #to exit the program 
return  #to exit from a function 
संबंधित मुद्दे