Python exit-commando’s – waarom zo veel en wanneer moeten ze allemaal worden gebruikt?

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:

  1. quit() verhoogt gewoon de SystemExit 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 de site module is geladen. In plaats daarvan moet deze functie alleen in de tolk worden gebruikt.

  2. exit() is een alias voor quit (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, wordt exit 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 module site.

  3. sys.exit() roept ook de uitzondering SystemExit op. Dit betekent dat het in dat opzicht hetzelfde is als quit en exit.

    In tegenstelling tot deze twee wordt sys.exit echter als goed beschouwd om in productiecode te gebruiken. Dit komt omdat de module sys er altijd zal zijn .

  4. 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 door os.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() of quit() in de REPL.

  • Gebruik sys.exit() in scripts, of raise SystemExit() als je wilt.

  • Gebruik os._exit() om onderliggende processen af ​​te sluiten na een aanroep van os.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.exitis 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes