codeop
— Kompilera Python-kod¶
Källkod: Lib/codeop.py
Modulen codeop
tillhandahåller verktyg som Pythons read-eval-print-loop kan emuleras med, på samma sätt som görs i modulen code
. Som ett resultat av detta vill du förmodligen inte använda modulen direkt; om du vill inkludera en sådan slinga i ditt program vill du förmodligen använda modulen code
istället.
Det här jobbet består av två delar:
Being able to tell if a line of input completes a Python statement: in short, telling whether to print ’
>>>
’ or ’...
’ next.Kommer ihåg vilka framtida uttalanden som användaren har angett, så att efterföljande inmatning kan sammanställas med dessa som effekt.
Modulen codeop
tillhandahåller ett sätt att göra var och en av dessa saker, och ett sätt att göra dem båda.
För att göra just det förstnämnda:
- codeop.compile_command(source, filename='<input>', symbol='single')¶
Försöker kompilera källa, som ska vara en sträng med Python-kod och returnerar ett kodobjekt om källa är giltig Python-kod. I så fall kommer filnamnsattributet för kodobjektet att vara filnamn, vilket som standard är
'<input>'
. ReturnerarNone
om källan inte är giltig Python-kod, men är ett prefix av giltig Python-kod.Om det finns ett problem med källa, kommer ett undantag att uppstå.
SyntaxError
uppstår om det finns en ogiltig Python-syntax, ochOverflowError
ellerValueError
om det finns en ogiltig bokstav.Argumentet symbol avgör om källa kompileras som en sats (
'single'
, standard), som en sekvens av statement ('exec'
) eller som ett expression ('eval'
). Alla andra värden kommer att orsakaValueError
.Anteckning
Det är möjligt (men inte troligt) att parsern slutar parsa med ett lyckat resultat innan den når slutet av källan; i så fall kan efterföljande symboler ignoreras istället för att orsaka ett fel. Till exempel kan en backslash följd av två nya streck följas av godtyckligt skräp. Detta kommer att åtgärdas när API:et för parsern är bättre.
- class codeop.Compile¶
Instanser av denna klass har
__call__()
-metoder med samma signatur som den inbyggda funktionencompile()
, men med skillnaden att om instansen kompilerar programtext som innehåller en__future__
-sats, ”minns” instansen och kompilerar alla efterföljande programtexter med satsen i kraft.
- class codeop.CommandCompiler¶
Instanser av denna klass har
__call__()
-metoder med samma signatur somcompile_command()
; skillnaden är att om instansen kompilerar programtext som innehåller en__future__
-sats, ”minns” instansen och kompilerar alla efterföljande programtexter med satsen i kraft.