En Python, il existe deux fonctions portant le même nom, exit()
et sys.exit()
. Quelle est la différence et quand dois-je utiliser l'un sur l'autre?
En Python, il existe deux fonctions portant le même nom, exit()
et sys.exit()
. Quelle est la différence et quand dois-je utiliser l'un sur l'autre?
Réponses:
exit
est une aide pour le shell interactif - sys.exit
est destiné à être utilisé dans les programmes.
Le
site
module (qui est importé automatiquement au démarrage, sauf si l'-S
option de ligne de commande est donnée) ajoute plusieurs constantes à l'espace de noms intégré (par exempleexit
) . Ils sont utiles pour l'interpréteur interactif et ne doivent pas être utilisés dans les programmes .
Techniquement, ils font essentiellement la même chose: élever SystemExit
. sys.exit
le fait dans 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;
}
Alors que exit
est défini dans site.py et _sitebuiltins.py , respectivement.
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')
Notez qu'il existe une troisième option de sortie, à savoir os._exit , qui se ferme sans appeler les gestionnaires de nettoyage, vider les tampons stdio, etc. (et qui ne devrait normalement être utilisée dans le processus enfant qu'après a fork()
).
from module import *
.
Si j'utilise exit()
dans un code et l'exécute dans le shell, il affiche un message me demandant si je veux tuer le programme ou non. C'est vraiment dérangeant.
Vois ici
Mais sys.exit()
c'est mieux dans ce cas. Il ferme le programme et ne crée aucune boîte de dialogue.
sys.exit()
soit utilisée dans les programmes.
-S
soit utilisé. Un moyen de le faire fonctionner même avec-S
est de spécifierfrom sys import *
.