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 till None.

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ända sys.ps1 och sys.ps2, samt buffring av indata. Om local_exit är true, kommer exit() och quit() i konsolen inte att ge upphov till SystemExit, 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 som InteractiveConsole.raw_input()-metoden, om den anges. Om local anges, skickas det till InteractiveConsole-konstruktören för användning som standardnamnrymd för tolkningsloopen. Om local_exit anges, skickas den till konstruktören för InteractiveConsole. Metoden interact() 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 till SyntaxError om kommandot är fullständigt och innehåller ett syntaxfel, eller ger upphov till OverflowError eller ValueError 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:

Returvärdet kan användas för att avgöra om sys.ps1 eller sys.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 utom SystemExit, 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 metoden write().

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 är True om mer indata krävs, False om raden hanterades på något sätt (detta är samma sak som runsource()).

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ån sys.stdin; en underklass kan ersätta detta med en annan implementering.