Avsluta / avsluta Python-skript (enkla exempel)

idag kommer vi att dyka in i ämnet att avsluta/avsluta Python-skript! Innan vi börjar, bör du ha en grundläggande förståelse för vad Python är och några grundläggande kunskaper om dess användning.

Du kan använda IDE efter eget val, men jag använder Microsofts Linux-delsystem för Windows (WSL) – paket den här gången. För mer information om det och hur du aktiverar det på Windows 10, gå här.

Innehållsförteckning

varför avslutar Python automatiskt ett skript när det är klart?,

sättet Python utför ett kodblock gör att det utför varje rad i ordning, kontrollerar beroenden för att importera, läsa definitioner och klasser för att lagra i minnet och exekvera bitar av kod för att möjliggöra slingor och samtal tillbaka till de definierade definitionerna och klasserna.

När Python-tolken når slutet av filen (EOF) märker den att den inte kan läsa några fler data från källan, oavsett om det är användarens inmatning via en IDE eller läsning från en fil. För att visa, låt oss försöka få användarinmatning och avbryta tolken mitt i utförandet!,

först, från din bash-terminal i ditt PowerShell öppna en ny fil som heter ”input.,n klistra in följande i skalet genom att högerklicka på PowerShell-fönstret

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

tryck nu på CTRL+X för att spara och avsluta nano-fönstret och i din skaltyp:

$ python3 input.pyDon"t type anything!

och tryck på CTRL+D för att avsluta programmet medan det väntar på användarinmatning

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

undantaget EOFError talar om för oss att Python-tolken slog i slutet av filen (EOF) innan den slutade köra koden, eftersom användaren inte angav några inmatningsdata.,

När Python når EOF-tillståndet samtidigt som den har exekverat all kod utan att kasta några undantag, vilket är ett sätt som Python kan avsluta ”graciöst.”

Detect script exit

om vi vill berätta när ett Python-program går ut utan att kasta ett undantag kan vi använda den inbyggda Python atexit – modulen.

atexit hanterar allt vi vill att programmet ska göra när det går ut och vanligtvis används för att göra programmet städa upp innan programprocessen avslutas

för att experimentera med atexit, låt oss ändra vår inmatning.,Py exempel för att skriva ut ett meddelande vid programmet exit. Öppna input.py Skriv ditt namn och när du trycker på enter ska du få:

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

Lägg märke till hur utgångstexten visas i slutet av utmatningen oavsett var vi placeraratexit – samtalet och hur vi byter utatexitring med en enkel print(), vi får utgångstexten där print() allt gjordes, snarare än där koden avslutas.,

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

graciös utgång

det finns flera sätt att avsluta ett Python-Program som inte innebär att kasta ett undantag; den första skulle försöka ärquit()

Du kan använda bash-kommandotecho $? för att få exitkoden för Python tolken.,

vi kan också definiera vilken typ av kod som tolken ska avsluta med genom att lämnaquit() ett heltalsargument mindre än 256

exit() har samma funktionalitet som det är ett alias förquit()

varkenquit() ellerquit() div id=”22ea63313b”> betraktas som god praxis, eftersom de båda kräver modulen site, som är avsedd att användas för interaktiva tolkar och inte i program., För våra program bör vi använda något som sys.exit

Observera att vi uttryckligen måste importera en modul för att ringa exit(), det kan tyckas att det inte är en förbättring, men det garanterar att den nödvändiga modulen laddas eftersom det inte är ett bra antagande site laddas vid körning., Om vi inte vill importera extra moduler kan vi göra det som exit(), quit() och sys.exit() gör bakom kulisserna och raise SystemExit

avsluta med att importera. felmeddelanden

vad händer om vi får dålig inmatning från en användare?, Låt oss titta tillbaka på vårt input.py – skript och lägga till möjligheten att hantera dålig inmatning från användaren (CTRL+D för att skicka ett EOF-tecken)

try – uttalandet berättar för Python att prova koden inuti uttalandet och att skicka något undantag till except – satsen innan du avslutar.

avsluta utan fel

vad händer om användaren ger ditt program ett fel men du vill inte att din kod ska skriva ut ett fel, eller att göra någon form av felhantering för att minimera användarpåverkan?,

vi kan lägga till ettfinally uttalande som låter oss köra kod efter att vi gjort vår felhantering icatch

Lägg märke till att användaren aldrig skulle känna till enEOFError inträffade, detta kan användas för att skicka standardvärden i händelse av dålig input eller argument.,

avsluta och släpp dina resurser

generellt släpper Python alla resurser du har ringt i ditt program automatiskt när det går ut, men för vissa processer är det bra att omsluta vissa begränsade resurser i ettwith – block.

ofta ser du detta iopen() samtal, där underlåtenhet att korrekt släppa filen kan orsaka problem med att läsa eller skriva till filen senare.

with blocket släpper automatiskt alla resurser som krävs inom den., Om vi ville mer explicit se till att filen stängdes kan vi använda kommandot atexit.register() för att ringa close()

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

om resurser anropas utan att använda ett with – block, se till att de uttryckligen släpps ut i ett atexit

avsluta efter en tid

om vi är oroliga att vårt program aldrig kan avslutas normalt kan vi använda Pythonsmultiprocessing – modul för att säkerställa att vårt program kommer att avslutas.,

Lägg märke till hur processen misslyckades med att slutföra när funktionen blev tillsagd att vänta i 7 sekunder men färdigställd och tryckt vad den skulle när den blev tillsagd att vänta 0 sekunder!

avsluta med ett returutdrag

om vi har en sektion av kod som vi vill använda för att avsluta hela programmet, istället för att låtabreak – satsen fortsätta koden utanför slingan, kan vi användareturn sys.exit() för att avsluta koden helt.,

avsluta mitt i en funktion

om vi inte vill använda ett returmeddelande kan vi fortfarande ringasys.exit() för att stänga vårt program och tillhandahålla ettreturn I en annan gren. Låt oss använda vår kod från break.py igen.

avsluta när villkoren är uppfyllda

om vi har en slinga i vår Python-kod och vi vill se till att koden kan avslutas om det stöter på ett problem, kan vi använda en flagga som den kan kontrollera för att avsluta programmet.,

avsluta på knapptryckning

om vi vill hålla vårt program öppet i konsolen tills vi trycker på en knapp kan vi använda en obundeninput() för att stänga den.

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

vi kan också skickaCTRL+C till konsolen för att ge Python ettKeyboardInterrupt – tecken. Vi kan även hantera KeyboardInterrupt undantag som vi har hanterat undantag innan.,

avsluta ett flertrådigt program

avsluta ett flertrådigt program är något mer involverat, eftersom en enkelsys.exit() anropas från tråden som endast kommer att avsluta den aktuella tråden., Det ”smutsiga” sättet att göra det är att använda os._exit()

som du kan se skrev programmet inte ut resten av programmet innan det gick ut, det är därför os._exit() är vanligtvis reserverat för en sista utväg och ringer antingen Thread.join() från huvudtråden är den föredragna metoden för att avsluta ett flertrådigt program.,

avsluta utan sys exit

Sys.exit() är bara ett av flera sätt som vi kan avsluta våra Python-program, vadsys.exit() gör ärraise SystemExit, så vi kan lika enkelt använda alla inbyggda i Python undantag eller skapa en av våra egna!

vi kan också användaos._exit() för att berätta för värdsystemet att döda python-processen, även om detta inte göratexit rensning.,

avsluta vid undantag

om vi vill avsluta på något undantag utan hantering kan vi använda vårttry-except – block för att utföraos._exit().

avsluta och starta om

slutligen utforskar vi vad vi gör för att avsluta Python och starta om programmet, vilket är användbart i många fall.

Jag hoppas att du hittar handledningen användbar. Kom tillbaka.

Tack.,

grundare av LikeGeeks. Jag arbetar som Linux systemadministratör sedan 2010. Jag är ansvarig för att upprätthålla, säkra och felsöka Linux-servrar för flera kunder runt om i världen. Jag älskar att skriva shell och Python skript för att automatisera mitt arbete.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *