পাইথনে প্রস্থান () এবং sys.exit () এর মধ্যে পার্থক্য


409

পাইথনে, দুটি একই ধরণের নামকৃত ফাংশন রয়েছে exit()এবং sys.exit()। পার্থক্য কী এবং আমি কখন অন্যটির ওপরে ব্যবহার করব?

উত্তর:


471

exitইন্টারেক্টিভ শেলের জন্য সহায়ক - sys.exitএটি প্রোগ্রামগুলিতে ব্যবহারের জন্য।

siteমডিউল (যা সূচনার সময় স্বয়ংক্রিয়ভাবে আমদানি করা হয় ব্যতীত যদি, -Sকম্যান্ড-লাইন অপশন উল্লিখিত থাকলে) বিল্ট-ইন নামস্থান বিভিন্ন ধ্রুবক যোগ (যেমন exit)এগুলি ইন্টারেক্টিভ ইন্টারপ্রেটার শেলের জন্য কার্যকর এবং প্রোগ্রামগুলিতে ব্যবহার করা উচিত নয়


প্রযুক্তিগতভাবে, তারা বেশিরভাগই একই করে: উত্থাপন SystemExitsys.exitযাতে করে sysmodule.c :

static PyObject *
sys_exit(PyObject *self, PyObject *args)
{
    PyObject *exit_code = 0;
    if (!PyArg_UnpackTuple(args, "exit", 0, 1, &exit_code))
        return NULL;
    /* Raise SystemExit so callers may catch it or clean up. */
    PyErr_SetObject(PyExc_SystemExit, exit_code);
   return NULL;
}

যদিও যথাক্রমে সাইট.পি এবং _সাইটবিল্টিনস.পি.-exit এ সংজ্ঞায়িত করা হয়েছে।

class Quitter(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return 'Use %s() or %s to exit' % (self.name, eof)
    def __call__(self, code=None):
        # Shells like IDLE catch the SystemExit, but listen when their
        # stdin wrapper is closed.
        try:
            sys.stdin.close()
        except:
            pass
        raise SystemExit(code)
__builtin__.quit = Quitter('quit')
__builtin__.exit = Quitter('exit')

মনে রাখবেন একটি তৃতীয় প্রস্থান বিকল্প রয়েছে, যথাঃ os._exit , যা ক্লিনআপ হ্যান্ডলার, ফ্লাশিং স্টিডো বাফার, ইত্যাদি কল না করেই প্রস্থান করে (এবং যা সাধারণত ক এর পরে শিশু প্রসেসে ব্যবহার করা উচিত fork())।


4
আমি সন্দেহ করি যে প্রস্থান (প্রধান ()) একটি প্রচলিত মূর্খতা কারণ মানুষ প্রোগ্রামগুলি নোটে ব্যবহার করা উচিত নয় । এটি -Sব্যবহার না করা পর্যন্ত সূক্ষ্ম কাজ করে । এমনকি এটির সাথে কাজ করার একটি উপায় -Sউল্লেখ করা from sys import *
নোবার

5
@ নোবার, সত্য, তবে আপনি আসলে ব্যবহার করতে চান না from module import *
মিকু

@ এভেজেনিসারজিভ, আমি নিশ্চিত না আপনি ঠিক কী জিজ্ঞাসা করছেন? এটি নিজে থেকেই একটি আকর্ষণীয় প্রশ্ন হতে পারে।
মিকু

"স্টেটমেন্ট সহ" এর মধ্যে তিনটি বহির্গমন ফাংশন ব্যবহার করার জন্য যদি কোন সমস্যা থাকে তবে তা উত্তর দেওয়া উত্তরের উত্তম যোগ হবে।
দেবপ্লেয়ার

32

আমি exit()যদি কোনও কোড ব্যবহার করি এবং এটি শেলটিতে চালিত করি তবে এটি একটি বার্তা দেখায় যা আমি জিজ্ঞাসা করব যে আমি প্রোগ্রামটি হত্যা করতে চাই কিনা। এটা সত্যিই বিরক্তিকর। এখানে দেখো

তবে sys.exit()এই ক্ষেত্রে ভাল। এটি প্রোগ্রামটি বন্ধ করে দেয় এবং কোনও সংলাপ বাক্স তৈরি করে না।


2
এটি কারণ ইন্টারেক্টিভ শেল ব্যবহারের জন্য ডিজাইন করা হয়েছে। তাই আপনি ডায়ালগটি চাইলেও sys.exit()প্রোগ্রামগুলির অভ্যন্তরে ব্যবহার করা উচিত।
TheTechRobo36414519
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.