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:
exitest une aide pour le shell interactif - sys.exitest destiné à être utilisé dans les programmes.
Le
sitemodule (qui est importé automatiquement au démarrage, sauf si l'-Soption 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.exitle 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 exitest 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.
-Ssoit utilisé. Un moyen de le faire fonctionner même avec-Sest de spécifierfrom sys import *.