Dalam Python, ada dua fungsi dengan nama yang sama, exit()
dan sys.exit()
. Apa bedanya dan kapan saya harus menggunakannya?
exit
adalah penolong untuk shell interaktif - sys.exit
dimaksudkan untuk digunakan dalam program.
The
site
modul (yang diimpor secara otomatis saat startup, kecuali jika-S
opsi baris perintah yang diberikan) menambahkan beberapa konstanta untuk built-in namespace (misalnyaexit
) . Mereka berguna untuk shell interpreter interaktif dan tidak boleh digunakan dalam program .
Secara teknis, mereka kebanyakan melakukan hal yang sama: membesarkan SystemExit
. sys.exit
melakukannya di 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;
}
Sementara exit
didefinisikan masing-masing dalam site.py dan _sitebuiltins.py .
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')
Perhatikan bahwa ada opsi keluar ketiga, yaitu os._exit , yang keluar tanpa memanggil penangan pembersihan, pembilasan stdio buffer, dll. (Dan yang biasanya hanya digunakan dalam proses anak setelah a fork()
).
-S
digunakan. Cara untuk membuatnya bekerja dengan-S
adalah untuk menentukanfrom sys import *
.from module import *
.Jika saya menggunakan
exit()
kode dan menjalankannya di shell, itu menunjukkan pesan yang menanyakan apakah saya ingin mematikan program atau tidak. Benar-benar mengganggu. Lihat disiniTetapi
sys.exit()
lebih baik dalam hal ini. Itu menutup program dan tidak membuat kotak dialog.sumber
sys.exit()
harus digunakan di dalam program.