फ़ंक्शन समाप्त होने से पहले अजगर में किसी फ़ंक्शन (जिसमें कोई वापसी मान नहीं है) से बाहर निकलने का सबसे अच्छा तरीका क्या है (जैसे एक चेक विफल रहता है)?


164

आइए एक पुनरावृत्ति मान लें जिसमें हम एक फ़ंक्शन को रिटर्न वैल्यू के बिना कहते हैं। जिस तरह से मुझे लगता है कि मेरे कार्यक्रम को व्यवहार करना चाहिए उसे इस छद्मकोड में समझाया गया है:

for element in some_list:
    foo(element)

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return None
    do much much more...

अगर मैं इसे अजगर में लागू करता हूं, तो यह मुझे परेशान करता है, कि यह फ़ंक्शन एक रिटर्न देता है None। क्या "किसी फ़ंक्शन से बाहर निकलने के लिए एक बेहतर तरीका है, जिसका कोई वापसी मूल्य नहीं है, अगर कोई फ़ंक्शन फ़ंक्शन के शरीर में विफल रहता है"?


6
यदि आप स्पष्ट रूप से कुछ वापस नहीं करते हैं तो पायथन हमेशा कोई नहीं लौटाता है। लेकिन आप कोई नहीं छोड़ सकते।
कीथ

2
चेक क्या है, इसके आधार पर, आप raiseअपवाद भी हो सकते हैं (या, बहुत कम ही, फ़ंक्शन को सही / गलत बनाते हैं)
रोश ऑक्सीमोरोन

जवाबों:


278

आप बस उपयोग कर सकते हैं

return

जो बिल्कुल वैसा ही करता है

return None

आपका फ़ंक्शन भी वापस आ जाएगा Noneयदि निष्पादन एक returnबयान को मारने के बिना फ़ंक्शन बॉडी के अंत तक पहुंचता है । कुछ भी न लौटाना Noneपाइथन में लौटने जैसा है ।


returnकाम नहीं करता है, अगर मैं सेट a = method(), अंदर विधि मैं का उपयोग करें return, यह अभी भी एक के पीछे कोड चल रहा है। निकास php बाहर निकलने () की तरह होना चाहिए, यह प्रोग्राम को तुरंत तोड़ देता है।
टॉमसेवर

2
@TomSawyer एक पायथन प्रोग्राम को जल्दी बंद करने के लिए, import sysपहले करें और फिर sys.exit()अगर आप बाहर निकलना चाहते हैं लेकिन सफलता की रिपोर्ट करें या sys.exit("some error message to print to stderr")
बोरिस

@ बोरिस, यह वही है जिसकी मुझे तलाश थी और यह मेरे लिए काम कर गया।
माईकी

17

मै सुझाव दूंगा:

def foo(element):
    do something
    if not check: return
    do more (because check was succesful)
    do much much more...

13

आप returnफ़ंक्शन से बाहर निकलने के लिए किसी भी पैरामीटर के बिना स्टेटमेंट का उपयोग कर सकते हैं

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        return
    do much much more...

या यदि आप समस्या से अवगत होना चाहते हैं तो एक अपवाद बढ़ाएँ

def foo(element):
    do something
    if check is true:
        do more (because check was succesful)
    else:
        raise Exception("cause of the problem")
    do much much more...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.