code
— Tolkens basklasser¶
Källkod: Lib/code.py
Modulen code
ger möjlighet att implementera read-eval-print-loopar i Python. Två klasser och bekvämlighetsfunktioner ingår som kan användas för att bygga applikationer som ger en interaktiv tolkprompt.
- class code.InteractiveInterpreter(locals=None)¶
Den här klassen hanterar parsning och tolkens tillstånd (användarens namnrymd); den hanterar inte buffring eller promptning av indata eller namngivning av indatafiler (filnamnet anges alltid explicit). Det valfria argumentet locals anger en mappning som ska användas som det namnrymd där koden ska exekveras; standard är en nyskapad ordbok med nyckeln
'__name__'
inställd till'__console__'
och nyckeln'__doc__'
inställd tillNone
.Observera att funktioner och klassobjekt som skapas under en
InteractiveInterpreter
-instans kommer att tillhöra det namnrymd som anges av locals. De är endast plockbara om locals är namnrymden för en befintlig modul.
- class code.InteractiveConsole(locals=None, filename='<console>', local_exit=False)¶
Emulerar nära beteendet hos den interaktiva Python-tolken. Denna klass bygger på
InteractiveInterpreter
och lägger till prompter med hjälp av de välkändasys.ps1
ochsys.ps2
, samt buffring av indata. Om local_exit är true, kommerexit()
ochquit()
i konsolen inte att ge upphov tillSystemExit
, utan istället återgå till den anropande koden.Ändrad i version 3.13: Lagt till parametern local_exit.
- code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False)¶
Bekvämlighetsfunktion för att köra en read-eval-print-loop. Detta skapar en ny instans av
InteractiveConsole
och anger att readfunc ska användas somInteractiveConsole.raw_input()
-metoden, om den anges. Om local anges, skickas det tillInteractiveConsole
-konstruktören för användning som standardnamnrymd för tolkningsloopen. Om local_exit anges, skickas den till konstruktören förInteractiveConsole
. Metodeninteract()
för instansen körs sedan med banner och exitmsg som banner och avslutningsmeddelande, om sådana har angetts. Konsolobjektet kasseras efter användning.Ändrad i version 3.6: Parametern exitmsg har lagts till.
Ändrad i version 3.13: Lagt till parametern local_exit.
- code.compile_command(source, filename='<input>', symbol='single')¶
Den här funktionen är användbar för program som vill emulera Pythons tolknings huvudloop (även kallad read-eval-print-loopen). Det svåra är att avgöra när användaren har angett ett ofullständigt kommando som kan kompletteras genom att ange mer text (i motsats till ett fullständigt kommando eller ett syntaxfel). Den här funktionen fattar nästan alltid samma beslut som den riktiga tolkens huvudslinga.
source är källsträngen; filename är det valfria filnamnet som källan lästes från, med standardvärdet
'<input>'
; och symbol är den valfria grammatikstartsymbolen, som bör vara'single'
(standardvärdet),'eval'
eller'exec'
.Returnerar ett kodobjekt (samma som
compile(source, filename, symbol)
) om kommandot är fullständigt och giltigt;None
om kommandot är ofullständigt; ger upphov tillSyntaxError
om kommandot är fullständigt och innehåller ett syntaxfel, eller ger upphov tillOverflowError
ellerValueError
om kommandot innehåller en ogiltig bokstav.
Interaktiva tolkningsobjekt¶
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')¶
Kompilera och kör en källkod i tolken. Argumenten är desamma som för
compile_command()
; standardvärdet för filnamn är'<input>'
, och för symbol är'single'
. En av flera saker kan hända:Indata är felaktig;
compile_command()
gav upphov till ett undantag (SyntaxError
ellerOverflowError
). En syntaxspårning kommer att skrivas ut genom att anropa metodenshowsyntaxerror()
.runsource()
returnerarFalse
.Indata är ofullständig och mer indata krävs;
compile_command()
returneradeNone
.runsource()
returnerarTrue
.Inmatningen är klar;
compile_command()
returnerade ett kodobjekt. Koden exekveras genom att anroparuncode()
(som också hanterar körtidsundantag, förutomSystemExit
).runsource()
returnerarFalse
.
Returvärdet kan användas för att avgöra om
sys.ps1
ellersys.ps2
ska användas för att fråga efter nästa rad.
- InteractiveInterpreter.runcode(code)¶
Exekvera ett kodobjekt. När ett undantag inträffar anropas
showtraceback()
för att visa en spårning. Alla undantag fångas upp utomSystemExit
, som tillåts fortplanta sig.En anmärkning om
KeyboardInterrupt
: detta undantag kan förekomma på andra ställen i denna kod, och kanske inte alltid fångas upp. Den som anropar bör vara beredd att hantera det.
- InteractiveInterpreter.showsyntaxerror(filename=None)¶
Visar det syntaxfel som just inträffade. Detta visar inte en stack trace eftersom det inte finns någon för syntaxfel. Om filnamn anges, stoppas det in i undantaget istället för standardfilnamnet som tillhandahålls av Pythons parser, eftersom den alltid använder
'<string>'
när den läser från en sträng. Utdata skrivs med metodenwrite()
.
- InteractiveInterpreter.showtraceback()¶
Visa det undantag som just inträffade. Vi tar bort det första stackobjektet eftersom det ligger inom tolkobjektets implementation. Utdata skrivs med metoden
write()
.Ändrad i version 3.5: Hela den kedjade spårningen visas i stället för bara den primära spårningen.
- InteractiveInterpreter.write(data)¶
Skriv en sträng till standardfelströmmen (
sys.stderr
). Härledda klasser bör åsidosätta detta för att tillhandahålla lämplig utdatahantering efter behov.
Interaktiva konsolobjekt¶
Klassen InteractiveConsole
är en underklass till InteractiveInterpreter
och erbjuder därför alla metoder som finns i tolkningsobjekten samt följande tillägg.
- InteractiveConsole.interact(banner=None, exitmsg=None)¶
Emulerar nära den interaktiva Python-konsolen. Det valfria argumentet banner anger den banner som ska skrivas ut före den första interaktionen; som standard skrivs en banner ut som liknar den som skrivs ut av Pythons standardtolk, följt av klassnamnet på konsolobjektet inom parentes (för att inte förväxla detta med den riktiga tolken - eftersom det är så nära!)
Det valfria argumentet exitmsg anger ett avslutningsmeddelande som skrivs ut vid avslutning. Skicka den tomma strängen för att undertrycka avslutningsmeddelandet. Om exitmsg inte anges eller om
None
, skrivs ett standardmeddelande ut.Ändrad i version 3.4: Om du inte vill att någon banner ska skrivas ut, skicka en tom sträng.
Ändrad i version 3.6: Skriv ut ett avslutningsmeddelande när du avslutar.
- InteractiveConsole.push(line)¶
Skicka en rad med källtext till tolken. Raden bör inte ha någon efterföljande ny rad; den kan ha interna nya rader. Raden läggs till i en buffert och tolkens
runsource()
-metod anropas med det sammanfogade innehållet i bufferten som källa. Om detta indikerar att kommandot utfördes eller var ogiltigt, återställs bufferten; i annat fall är kommandot ofullständigt och bufferten lämnas som den var efter att raden hade lagts till. Returvärdet ärTrue
om mer indata krävs,False
om raden hanterades på något sätt (detta är samma sak somrunsource()
).
- InteractiveConsole.resetbuffer()¶
Ta bort eventuell ohanterad källtext från inmatningsbufferten.
- InteractiveConsole.raw_input(prompt='')¶
Skriv en prompt och läs en rad. Den returnerade raden innehåller inte den efterföljande nya raden. När användaren anger EOF-tangentsekvensen genereras
EOFError
. Basimplementeringen läser frånsys.stdin
; en underklass kan ersätta detta med en annan implementering.