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.