Python exit-kommandoer - hvorfor så mange og når bør de brukes?

Det ser ut til at python støtter mange forskjellige kommandoer for å stoppe kjøring av skript: quit(), exit(), sys.exit(), os._exit().

Har jeg gått glipp av noen? Hva er forskjellen mellom dem? Når vil du bruke hver av dem?

La meg gi litt informasjon om dem:

  1. `quit() utløser unntaket `SystemExit bak kulissene.

Hvis du skriver den ut, vil den dessuten gi en melding:

    >>> print (quit)
    Bruk quit() eller Ctrl-Z pluss Return for å avslutte.
    >>>>

Denne funksjonaliteten ble inkludert for å hjelpe folk som ikke kan Python. Tross alt er noe av det mest sannsynlige en nybegynner vil prøve å avslutte Python ved å skrive quit.

Likevel bør quit ikke brukes i produksjonskode. Den fungerer nemlig bare hvis modulen site er lastet inn. I stedet bør denne funksjonen bare brukes i fortolkeren.

  1. exit() er et alias for quit (eller omvendt). De eksisterer sammen for å gjøre Python mer brukervennlig.

Dessuten gir den også en melding når den skrives ut:

    >>>> print (exit)
    Bruk exit() eller Ctrl-Z pluss Return for å avslutte.
    >>>

I likhet med quit er exit imidlertid ansett som dårlig å bruke i produksjonskode og bør reserveres for bruk i tolken. Dette er fordi den også er avhengig av site-modulen.

  1. sys.exit() utløser unntaket SystemExit i bakgrunnen. Det betyr at den er den samme som quit og exit i så måte.

I motsetning til disse to anses imidlertid sys.exit som god å bruke i produksjonskode. Dette er fordi sys-modulen alltid vil være der.

  1. os._exit() avslutter programmet uten å kalle oppryddingsbehandlere, skylle stdio-buffere osv. Det er derfor ikke en standard måte å avslutte på, og bør bare brukes i spesielle tilfeller. Det vanligste av disse er i underprosessen(e) som opprettes av os.fork.

Legg merke til at av de fire metodene som er oppgitt, er det bare denne som er unik i det den gjør.

Oppsummert avslutter alle fire metodene programmet. De to første anses imidlertid som dårlige å bruke i produksjonskode, og den siste er en ikke-standard, skitten måte som bare brukes i spesielle scenarier. Så hvis du vil avslutte et program på vanlig måte, bør du bruke den tredje metoden: sys.exit.


Eller, enda bedre etter min mening, du kan bare gjøre direkte det sys.exit gjør bak kulissene og kjøre:

raise SystemExit

På denne måten trenger du ikke å importere sys først.

Dette er imidlertid bare et stilvalg og er helt opp til deg.

Kommentarer (8)

Funksjonene* quit(), exit() og sys.exit() fungerer på samme måte: de utløser unntaket SystemExit. Det er altså ingen reell forskjell, bortsett fra at sys.exit() alltid er tilgjengelig, mens exit() og quit() bare er tilgjengelige hvis site-modulen er importert.

Funksjonen os._exit() er spesiell, den avslutter umiddelbart uten å kalle opprydningsfunksjoner (den skyller for eksempel ikke buffere). Den er laget for svært spesialiserte bruksområder... i utgangspunktet bare i barnet etter et os.fork()-kall.

Konklusjon

  • Bruk exit() eller quit() i REPL.

  • Bruk sys.exit() i skript, eller raise SystemExit() hvis du foretrekker det.

  • Bruk os._exit() for underordnede prosesser som skal avsluttes etter et kall til os.fork().

Alle disse kan kalles uten argumenter, eller du kan spesifisere avslutningsstatusen, f.eks. exit(1) eller raise SystemExit(1) for å avslutte med status 1. Vær oppmerksom på at portable programmer er begrenset til exit-statuskoder i området 0-255. Hvis du kaller raise SystemExit(256) på mange systemer, vil denne koden bli avkortet, og prosessen avsluttes med status 0.

Fotnoter

  • Egentlig er quit() og exit() kallbare instansobjekter, men jeg synes det er greit å kalle dem funksjoner.
Kommentarer (0)

Forskjellige måter å gå ut på

os._exit():

  • Avslutter prosessen uten å kalle opprydningshåndtererne.

exit(0):

  • en ren avslutning uten feil/problemer.

exit(1):

  • Det oppstod et problem / en feil / et problem, og det er derfor programmet avsluttes.

sys.exit():

  • Når systemet og python lukkes ned; det betyr at det brukes mindre minne etter at programmet er kjørt.

quit():

  • Lukker python-filen.

Sammendrag

I utgangspunktet gjør de alle det samme, men det avhenger også av hva du gjør det for.

Jeg tror ikke du har utelatt noe, og jeg vil anbefale deg å venne deg til quit() eller exit().

Du vil bruke sys.exit() og os._exit() hovedsakelig hvis du bruker store filer eller bruker python til å styre terminalen.

Ellers bruker du hovedsakelig exit() eller quit().

Kommentarer (1)