Afslutter / afslutter Python-scripts (enkle eksempler)

i dag dykker vi ind i emnet for spændende/afslutter Python-scripts! Før vi kommer i gang, skal du have en grundlæggende forståelse af, hvad Python er, og nogle grundlæggende viden om dens anvendelse.

Du kan bruge IDE efter eget valg, men jeg bruger Microsofts Linu.Subsystem til packageindo .s (Linsl) pakke denne gang. For mere information om det, og hvordan du aktiverer det på Windowsindo .s 10, gå her.

Indholdsfortegnelse

Hvorfor forlader Python automatisk et script, når det er gjort?,

den måde, Python udfører en kodeblok på, gør det muligt at udføre hver linje i rækkefølge, kontrollere afhængigheder til import, læse definitioner og klasser, der skal gemmes i hukommelsen, og udføre kodestykker for at give mulighed for sløjfer og opkald tilbage til de definerede definitioner og klasser.

Når Python-tolken når slutningen af filen (EOF), bemærker den, at den ikke kan læse flere data fra kilden, hvad enten det er brugerens input gennem en IDE eller læsning fra en fil. For at demonstrere, lad os prøve at få brugerinput og afbryde tolken midt i udførelsen!,

Åbn først en ny fil kaldet “input” fra din bash-terminal i din po .ershell.,n indsætte følgende i skallen ved at højre-klikke på PowerShell-vindue

name=input("Don"t type anything!\n")print("Hi,",name,"!")

Nu, skal du trykke på CTRL+X for at gemme og afslutte programmet nano-vinduet, og i din shell type:

$ python3 input.pyDon"t type anything!

Og tryk på CTRL+D for at afslutte programmet, mens det venter på input fra brugeren

Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError

EOFError undtagelse fortæller os, at Python-fortolker hit slutningen af filen (EOF) tilstand, før den færdige udførelse af kode, som brugeren har indtastet noget input data.,

Når Python når EOF-tilstanden på samme tid, at den har udført hele koden uden at smide nogen undtagelser, hvilket er en måde, Python kan afslutte “yndefuldt.”

Detect script e .it

Hvis vi vil fortælle, hvornår et Python-program afslutter uden at kaste en undtagelse, kan vi bruge det indbyggede Pythonatexit modul.

atexit håndterer alt, hvad vi ønsker, at programmet skal gøre, når det afslutter, og bruges typisk til at rydde op, før programprocessen afslutter

for at eksperimentere med ate .it, lad os ændre vores input.,py eksempel for at udskrive en besked ved programafgangen. Åbne input.py filen igen, og udskift teksten med

import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")

Skriv dit navn, og når du trykker på enter, bør du få:

What"s your name?ExampleHi, Example !Program exited successfully!

læg Mærke til, hvordan exit-tekst vises ved slutningen af produktionen, uanset hvor vi placerer atexit kalde, og hvordan, hvis vi udskifter atexit opkald med en enkel print(), så får vi forlade tekst, hvor print() alt var lavet, snarere end hvor den kode, der kommer ud af printeren.,

Program exited successfully!What"s your name?ExampleHi, Example !

Yndefulde afslut

Der er flere måder at afslutte et Python-Program, der ikke involverer at kaste en undtagelse; den første var, at gå til prøve, er quit()

Du kan bruge bash-kommandoen echo $? for at få den exit kode for Python-fortolkeren.,

man kan også definere den type kode tolken bør afslut med ved at indlevere quit() er et heltal argument er mindre end 256

exit() har den samme funktionalitet som det er et alias for quit()

Ingen quit() eller exit() betragtes som god praksis, som de begge kræve site modul, der er beregnet til at anvendes til interaktiv tolke og ikke i programmer., For vores programmer, vi skal bruge noget lignende sys.exit

Bemærk, at vi er nødt til eksplicit at importere et modul til at ringe exit(), dette kan synes som dens ikke en forbedring, men det sikrer, at de nødvendige modulet er indlæst, fordi det ikke er en god antagelse site vil blive lagt på runtime., Hvis vi ikke ønsker at importere ekstra moduler, vi kan gøre, hvad exit() quit() og sys.exit() laver bag kulisserne og raise SystemExit

Afslut med fejlmeddelelser

Hvad hvis vi får dårlig input fra en bruger?, Lad os se tilbage på vores input.py script, og tilføje evne til at håndtere dårlige input fra brugeren (CTRL+D for at passere en EOF karakter)

try erklæring fortæller Python til at prøve den kode, inde i sætningen og til at videregive eventuelle undtagelse af except erklæring om, før du afslutter.

afslutter uden fejl

Hvad hvis brugeren giver dit program en fejl, men du ikke ønsker, at din kode skal udskrive en fejl, eller at gøre en slags fejlhåndtering for at minimere brugerpåvirkningen?,

Vi kan tilføje en finally erklæring, der giver os mulighed for at udføre kode efter vi gør vores håndtering af fejl i catch

Bemærk brugeren ville aldrig vide, at et EOFError opstod, dette kan bruges til at fordrive default-værdier i tilfælde af dårlig input eller argumenter.,

Afslut, og slip dine ressourcer

Generelt, Python-udgivelser alle de ressourcer, du har kaldt dit program automatisk, når det skubbes ud, men for visse processer, er det god praksis at indramme nogle begrænsede ressourcer i en with bloker.

ofte vil du se dette i open() opkald, hvor manglende korrekt frigivelse af filen kan forårsage problemer med at læse eller skrive til filen senere.

with block frigiver automatisk alle ressourcer, der kræves i den., Hvis vi ønskede mere eksplicit at sikre, at den fil, der blev lukket, kunne vi bruge atexit.register() kommando til at ringe close()

$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)

Hvis ressourcer uden at bruge en with blok, sørg for, at eksplicit slip dem i en atexit kommandoen.

Afslut efter en tid

Hvis vi er bekymrede for, at vores program måske aldrig ophører normalt, kan vi bruge Pythonsmultiprocessing modul for at sikre, at vores program afsluttes.,

bemærk, hvordan processen mislykkedes, når funktionen blev bedt om at vente i 7 sekunder, men afsluttet og udskrevet, hvad den skulle, da den blev bedt om at vente 0 sekunder!

Spændende hjælp af en return-sætning

Hvis vi har en sektion af kode, vi vil bruge til at opsige hele programmet, i stedet for at lade den break erklæring fortsætte kode uden, the loop, og vi kan bruge return sys.exit() for at afslutte koden helt.,

Afslut i midten af en funktion

Hvis vi ikke ønsker at bruge en return-sætning, vi kan stadig ringe til det sys.exit() for at lukke vores program, og give en return i en anden filial. Lad os bruge vores kode fra break.py igen.

Afslut, når betingelserne er opfyldt

Hvis vi har en løkke i vores Python-kode, og vi ønsker at sikre, at den kode kan afslutte, hvis den støder på et problem, kan vi bruge et flag, som det kan se for at afslutte programmet.,

Afslut ved tastetryk

Hvis vi ønsker at holde vores program åbent i konsollen, før vi trykker på en tast, kan vi bruge en ubundet input() for at lukke det.

$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$

Vi kan også videregive CTRL+C til konsollen for at give Python KeyboardInterrupt karakter. Vi kan endda håndtere KeyboardInterrupt undtagelse som vi har håndteret undtagelser før.,

Afslut et multithreaded program

Spændende et flertrådet program er lidt mere involveret, som en simpel sys.exit() kaldes fra en tråd, der kun vil forlade den aktuelle tråd., Den “beskidte” måde at gøre det på er at bruge os._exit()

Som du kan se, at programmet ikke udskrive resten af programmet, inden det forlades, dette er grunden til, at os._exit() er typisk forbeholdt en sidste udvej, og at kalde enten Thread.join() fra den røde tråd er den foretrukne metode til afslutning af et multithreaded program.,

Afslut uden sys afslut

Sys.exit() er kun en af flere måder, hvorpå vi kan afslutte vores Python-programmer, hvad sys.exit() gør er raise SystemExit så vi kan lige så godt bruge nogen indbygget Python undtagelse eller opret en af vores egne!

Vi kan også bruge os._exit() for at fortælle værten system til at dræbe python proces, selv om dette ikke gøre atexit diskoprydning.,

Afslut ved undtagelse

Hvis vi ønsker at afslutte på nogen undtagelse, uden nogen behandling, vi kan bruge vores try-except blok til at udføre os._exit().

Afslut og genstart

endelig undersøger vi, hvad vi gør for at afslutte Python og genstarte programmet, hvilket er nyttigt i mange tilfælde.

Jeg håber du finder vejledningen nyttig. Bliv ved med at komme tilbage.

Tak.,

Grundlægger af LikeGeeks. Jeg arbejder som Linu.systemadministrator siden 2010. Jeg er ansvarlig for vedligeholdelse, sikring og fejlfinding af Linu. – servere til flere klienter over hele verden. Jeg elsker at skrive shell og Python scripts til at automatisere mit arbejde.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *