Het lijkt erop dat python veel verschillende commando’s ondersteunt om de uitvoering van scripts te stoppen.
De keuzes die ik heb gevonden zijn: quit()
, exit()
, sys.exit()
, os._exit()
Heb ik er een gemist?
Wat is het verschil tussen hen? Wanneer zou je elk gebruiken?
Antwoord 1, autoriteit 100%
Laat me wat informatie over hen geven:
-
quit()
verhoogt gewoon deSystemExit
uitzondering .Bovendien, als u het afdrukt, geeft het een bericht:
>>> print (quit) Use quit() or Ctrl-Z plus Return to exit >>>
Deze functionaliteit is opgenomen om mensen te helpen die Python niet kennen. Een van de meest waarschijnlijke dingen die een newbie zal proberen om Python te verlaten, is het intypen van
quit
.Toch moet
quit
niet worden gebruikt in productiecode. Dit komt omdat het alleen werkt als desite
module is geladen. In plaats daarvan moet deze functie alleen in de tolk worden gebruikt. -
exit()
is een alias voorquit
(of omgekeerd). Ze bestaan gewoon samen om Python gebruiksvriendelijker te maken.Bovendien geeft het ook een bericht wanneer het wordt afgedrukt:
>>> print (exit) Use exit() or Ctrl-Z plus Return to exit >>>
Echter, net als
quit
, wordtexit
als slecht beschouwd om te gebruiken in productiecode en moet worden gereserveerd voor gebruik in de tolk. Dit komt omdat het ook afhankelijk is van de modulesite
. -
sys.exit()
roept ook de uitzonderingSystemExit
op. Dit betekent dat het in dat opzicht hetzelfde is alsquit
enexit
.In tegenstelling tot deze twee wordt
sys.exit
echter als goed beschouwd om in productiecode te gebruiken. Dit komt omdat de modulesys
er altijd zal zijn . -
os._exit()
verlaat het programma zonder opschoon-handlers aan te roepen, stdio-buffers leeg te maken, enz.. Het is dus geen standaard manier om af te sluiten en mag alleen in speciale gevallen worden gebruikt. De meest voorkomende hiervan zijn de onderliggende processen die zijn gemaakt dooros.fork
.Merk op dat van de vier gegeven methoden, alleen deze uniek is in wat het doet.
Samengevat: alle vier de methoden verlaten het programma. De eerste twee worden echter als slecht beschouwd om in productiecode te gebruiken en de laatste is een niet-standaard, vuile manier die alleen in speciale scenario’s wordt gebruikt. Dus als je een programma normaal wilt afsluiten, gebruik dan de derde methode: sys.exit
.
Of, nog beter naar mijn mening, je kunt gewoon direct doen wat sys.exit
achter de schermen doet en uitvoeren:
raise SystemExit
Op deze manier hoeft u sys
niet eerst te importeren.
Deze keuze is echter puur stijl en geheel aan jou.
Antwoord 2, autoriteit 13%
De functies* quit()
, exit()
en sys.exit()
werken in op dezelfde manier: ze verhogen de uitzondering SystemExit
. Er is dus geen echt verschil, behalve dat sys.exit()
altijd beschikbaar is, maar exit()
en quit()
alleen beschikbaar zijn als de site
module is geïmporteerd.
De functie os._exit()
is speciaal, het wordt onmiddellijk afgesloten zonder opschoonfuncties aan te roepen (het spoelt bijvoorbeeld geen buffers). Dit is ontworpen voor zeer gespecialiseerde toepassingen… in principe alleen bij het kind na een os.fork()
-aanroep.
Conclusie
-
Gebruik
exit()
ofquit()
in de REPL. -
Gebruik
sys.exit()
in scripts, ofraise SystemExit()
als je wilt. -
Gebruik
os._exit()
om onderliggende processen af te sluiten na een aanroep vanos.fork()
.
Al deze kunnen zonder argumenten worden aangeroepen, of u kunt de exit-status specificeren, bijv. exit(1)
of raise SystemExit(1)
om af te sluiten met status 1. Houd er rekening mee dat draagbare programma’s beperkt zijn tot het verlaten van statuscodes in het bereik van 0-255. Als u op veel systemen raise SystemExit(256)
verhoogt, wordt dit afgekapt en wordt uw proces daadwerkelijk afgesloten met status 0.
Voetnoten
* Eigenlijk zijn quit()
en exit()
oproepbare instantie-objecten, maar ik denk dat het oké is om ze functies te noemen.
Antwoord 3, autoriteit 7%
Verschillende manieren om te vertrekken
os._exit()
:
- Sluit het proces af zonder de opruimbehandelaars aan te roepen.
exit(0)
:
- een schone exit zonder fouten / problemen.
exit(1)
:
- Er was een probleem/fout/probleem en daarom wordt het programma afgesloten.
sys.exit()
:
- Wanneer het systeem en python worden afgesloten; het betekent dat er minder geheugen wordt gebruikt nadat het programma is uitgevoerd.
quit()
:
- Sluit het python-bestand.
Samenvatting
In principe doen ze allemaal hetzelfde, maar het hangt ook af van waar je het voor doet.
Ik denk dat je niets hebt weggelaten en ik raad je aan om te wennen aan quit()
of exit()
.
U zou sys.exit()
en os._exit()
voornamelijk gebruiken als u grote bestanden gebruikt of python gebruikt om de terminal te besturen.
Gebruik anders vooral exit()
of quit()
.
Antwoord 4, autoriteit 5%
sys.exit
is de canonieke manier om af te sluiten.
Intern verhoogt sys.exit
gewoon SystemExit
. Het aanroepen van sys.exit
is echter meer idiomatisch dan rechtstreeks SystemExit
aanroepen.
os.exit
is een systeemaanroep op laag niveau die direct wordt afgesloten zonder dat er een opschoningshandler wordt aangeroepen.
quit
en exit
bestaan alleen om een gemakkelijke uitweg uit de Python-prompt te bieden. Dit is voor nieuwe gebruikers of gebruikers die per ongeluk de Python-prompt hebben ingevoerd en niet de juiste syntaxis willen weten. Ze zullen waarschijnlijk proberen exit
of quit
te typen. Hoewel dit de tolk niet zal verlaten, geeft het in ieder geval een bericht af dat hen een uitweg vertelt:
>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
$
Dit is in wezen gewoon een hack die gebruikmaakt van het feit dat de interpreter de __repr__
afdrukt van elke uitdrukking die u invoert bij de prompt.