Python-exit-kommandoer - hvorfor så mange, og hvornår skal de bruges?

Det ser ud til at python understøtter mange forskellige kommandoer til at stoppe scriptudførelsen.
De valgmuligheder jeg har fundet er: quit(), exit(), sys.exit(), os._exit()

Har jeg overset nogen? Hvad er forskellen mellem dem? Hvornår ville du bruge dem hver især?

Lad mig give nogle oplysninger om dem:

  1. quit() giver anledning til undtagelsen SystemExit bag kulisserne.

Hvis du udskriver den, vil den desuden give en besked:

    >>>> print (quit)
    Brug quit() eller Ctrl-Z plus Return for at afslutte
    >>>>

Denne funktionalitet blev medtaget for at hjælpe folk, der ikke kender Python. Når alt kommer til alt, er en af de mest sandsynlige ting en nybegynder vil forsøge at afslutte Python ved at skrive quit.

Ikke desto mindre bør quit ikke bruges i produktionskode. Det skyldes, at det kun virker, hvis modulet site er indlæst. I stedet bør denne funktion kun bruges i fortolkeren.

  1. exit() er et alias for quit (eller omvendt). De eksisterer sammen blot for at gøre Python mere brugervenligt.

Desuden giver den også en besked, når den udskrives:

    >>>> print (exit)
    Brug exit() eller Ctrl-Z plus Return for at afslutte
    >>>>

Ligesom quit anses exit dog for at være dårlig at bruge i produktionskode og bør reserveres til brug i fortolkeren. Dette skyldes, at det også er afhængig af site-modulet.

  1. sys.exit() udløser undtagelsen SystemExit i baggrunden. Det betyder, at det er det samme som quit og exit i den henseende.

I modsætning til disse to anses sys.exit dog for at være god at bruge i produktionskode. Det skyldes, at sys-modulet altid vil være der.

  1. os._exit() afslutter programmet uden at kalde oprydningshåndterer, flushing stdio buffers, osv. Derfor er det ikke en standard måde at afslutte på og bør kun bruges i særlige tilfælde. Det mest almindelige af disse er i den eller de underordnede processer, der er oprettet af os.fork.

Bemærk, at af de fire angivne metoder er det kun denne metode, der er unik i det, den gør.

Samlet set afslutter alle fire metoder programmet. De to første anses dog for at være dårlige at bruge i produktionskode, og den sidste er en ikke-standardiseret, beskidt metode, som kun bruges i særlige scenarier. Så hvis du ønsker at afslutte et program normalt, skal du vælge den tredje metode: sys.exit.


Eller, endnu bedre efter min mening, kan du bare gøre direkte hvad sys.exit gør bag kulisserne og køre:

raise SystemExit

På denne måde behøver du ikke importere sys først.

Dette valg er dog blot et stilmæssigt valg og er helt op til dig.

Kommentarer (8)

Funktionerne* quit(), exit() og sys.exit() fungerer på samme måde: de udløser undtagelsen SystemExit. Så der er ingen reel forskel, bortset fra at sys.exit() altid er tilgængelig, men exit() og quit() er kun tilgængelige, hvis site modulet er importeret.

Funktionen os._exit() er speciel, den afsluttes med det samme uden at kalde nogen oprydningsfunktioner (den flusher f.eks. ikke buffere). Dette er designet til meget specialiserede brugstilfælde... dybest set kun i barnet efter et os.fork() kald.

Konklusion

  • Brug exit() eller quit() i REPL'en.

  • Brug sys.exit() i scripts, eller raise SystemExit() hvis du foretrækker det.

  • Brug os._exit() for underprocesser til at afslutte efter et kald til os.fork().

Alle disse kan kaldes uden argumenter, eller du kan angive exit-status, f.eks. exit(1) eller raise SystemExit(1) for at afslutte med status 1. Bemærk at portable programmer er begrænset til exit status koder i intervallet 0-255, hvis du raise SystemExit(256) på mange systemer vil dette blive afkortet og din proces vil faktisk afsluttes med status 0.

Fodnoter

  • Egentlig er quit() og exit() instansobjekter, der kan kaldes, men jeg synes det er i orden at kalde dem funktioner.
Kommentarer (0)

Forskellige metoder til at forlade stedet

os._exit():

  • afslutter processen uden at kalde oprydningshandlerne.

exit(0):

  • en ren exit uden fejl/problemer.

exit(1):

  • Der var et problem / en fejl / et problem, og det er derfor, at programmet afsluttes.

sys.exit():

  • Når systemet og python lukker ned, betyder det, at der bruges mindre hukommelse, efter at programmet er kørt.

quit():

  • Lukker python-filen.

Resumé

I bund og grund gør de alle det samme, men det afhænger også af, hvad du gør det til.

Jeg tror ikke du har udeladt noget, og jeg vil anbefale dig at vænne dig til quit() eller exit().

Du ville bruge sys.exit() og os._exit() primært hvis du bruger store filer eller bruger python til at styre terminalen.

Ellers skal du primært bruge exit() eller quit().

Kommentarer (1)