546 Stimmen

Unterschied zwischen exit() und sys.exit() in Python

In Python gibt es zwei Funktionen mit ähnlichem Namen, exit() y sys.exit() . Worin besteht der Unterschied und wann sollte ich das eine statt des anderen verwenden?

605voto

miku Punkte 170688

exit ist ein Hilfsmittel für die interaktive Shell - sys.exit ist für die Verwendung in Programmen vorgesehen.

Le site site Modul (das beim Start automatisch importiert wird, es sei denn, das -S Befehlszeilenoption) fügt dem eingebauten Namensraum mehrere Konstanten hinzu (z.B.. exit ) . Sie sind nützlich für die interaktive Interpreter-Shell und sollten nicht in Programmen verwendet werden .


Technisch gesehen tun sie größtenteils das Gleiche: sie heben SystemExit . sys.exit tut dies in 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;
}

Während exit ist definiert in site.py y _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')

Beachten Sie, dass es noch eine dritte Ausstiegsmöglichkeit gibt, nämlich os._exit , das ohne den Aufruf von Cleanup-Handlern, das Leeren von stdio-Puffern usw. beendet wird (und das normalerweise nur im Kindprozess nach einem fork() ).

59voto

Wenn ich die exit() Wenn ich einen Code einfüge und ihn in der Shell ausführe, wird eine Meldung angezeigt, in der ich gefragt werde, ob ich das Programm beenden möchte oder nicht. Das ist wirklich beunruhigend. Siehe hier

Aber sys.exit() ist in diesem Fall besser. Es schließt das Programm und erzeugt kein Dialogfeld.

14voto

Stas Sorokin Punkte 1673

Lösung, Ursprünge, Unterschiede & Geschwindigkeit

Warum brauchen wir die exit() / sys.exit() Befehle?

Normalerweise läuft der Code die Zeilen bis zum Ende durch und das Programm existiert automatisch. Gelegentlich möchten wir das Programm auffordern, sich zu schließen, bevor der gesamte Zyklus durchgelaufen ist. Wenn Sie beispielsweise eine Authentifizierung implementieren und ein Benutzer sich nicht authentifizieren kann, möchten Sie in manchen Fällen das Programm beenden.

Le site exit()

Verlässt Python.

Vielleicht wusstest du das nicht, aber es ist ein Synonym für quit() und wurde hinzugefügt nach quit() um Python benutzerfreundlicher zu machen. Entwickelt, um mit interaktiven Shells zu arbeiten.

使用方法 Verwenden Sie die integrierte exit() direkt nach dem Auspacken, ohne eine Bibliothek zu importieren. Geben Sie einfach dies ein:

exit()

Ausführungszeit: 0.03s

Vorteile:

  • Schneller in der Anwendung (eingebaut)
  • Funktioniert sowohl mit Python 2.x als auch mit Python 3.x
  • Schnell
  • Kann genauso verwendet werden wie sys.exit() (mit der Ausnahme)

Nachteile:

  • Keine Ausnahmemeldung

Le site sys.exit()

Beendet Python und löst die SystemExit-Ausnahme aus (erfordert einen Import). Entwickelt, um innerhalb von Programmen zu arbeiten.

使用方法

import sys
sys.exit()

Ausführungszeit (nur für den Import und sys.exit() ): 0.07s

Oder Sie können eine Meldung für die SystemExit-Ausnahme verwenden:

Hinzugefügt finally Block zur Veranschaulichung der Codebereinigungsklausel. Inspiriert von @Nairum.

import sys
try:
  sys.exit("This is an exit!")
except SystemExit as error:
  print(error)
finally:
  print("Preforming cleanup in 3, 2, 1..")
  # Do code cleanup on exit

Sortie :

Das ist ein Ausgang!

Aufräumarbeiten in 3, 2, 1

Vorteile:

  • Löst die SystemExit-Ausnahme aus
  • Sie können eine Ausnahmemeldung verwenden
  • Schließt sich ohne einen Dialog
  • Verwendet finally Klausel von try
  • Funktioniert sowohl mit Python 2.x als auch mit Python 3.x

Nachteile:

  • Benötigt einen Import
  • Um 57,1 % langsamer als exit()

Schlussfolgerung:

Wenn Sie keine Ausnahme mit einer optionalen Nachricht benötigen, dann verwenden Sie exit() Dies ist schneller und eingebaut. Wenn Sie mehr Funktionalität einer Ausnahme mit einer optionalen Nachricht benötigen, verwenden Sie sys.exit() .

In den Codebeispielen verwende ich Python 3.x

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X