Il modulo codeop fornisce le utility attraverso le quali il ciclo Python leggi-valuta-stampa può venire emulato, così come viene fatto nel modulo code. Di conseguenza, probabilmente non vorrete utilizzare il modulo direttamente; se vorrete infatti includere un ciclo simile nel vostro programma, probabilmente vorrete usare il modulo code.
Due parti suddividono questo lavoro:
>>
>
o `...
'.
Il modulo codeop fornisce un metodo per per compiere ciascuna di queste azioni, ed un metodo per compierle entrambe, insieme.
Nel primo caso:
source[, filename[, symbol]]) |
'<input>'
.
Restituisce None
se source non è codice Python
valido, ma è un prefisso di codice Python valido.
Se si verifica un problema con source, verrà sollevata un'eccezione. Viene sollevata l'eccezione SyntaxError se si presenta della sintassi Python non valida, e OverflowError oppure ValueError se è presente una costante non valida.
L'argomento symbol determina quando source viene compilata
come una dichiarazione (il valore predefinito è 'single'
) o come
espressione ('eval'
). Qualsiasi altro valore provocherà il
sollevamento dell'eccezione ValueError.
Avvertenza: È possibile (ma non piacevole) che il parser blocchi l'analisi con un risultato di successo prima che sia stata raggiunta la fine del sorgente; in questo caso, i simboli finali possono venire ignorati piuttosto che causare errori. Per esempio, un backslash seguito da due caratteri di fine riga può essere seguito da garbage arbitraria. Questo comportamento verrà corretto quando le API per il parser verranno migliorate.
) |
__future__
, l'istanza stessa 'ricorda' e compila tutte le
successive porzioni del programma con la dichiarazione in vigore.
) |
__future__
, l'istanza stessa 'ricorda' e compila tutte le
successive porzioni del programma con la dichiarazione in vigore.
Una nota sulla compatibilità tra le versioni: Compile e CommandCompiler sono nuove in Python 2.2. Se volete abilitare la caratteristica future-tracking del 2.2 ma mantenere contemporaneamente la compatibilità con la 2.1 e le versioni precedenti, potete scrivere sia:
try: from codeop import CommandCompiler compile_command = CommandCompiler() del CommandCompiler except ImportError: from codeop import compile_command
che è un cambiamento di impatto ridotto ma introduce possibili stati non voluti nel vostro programma, oppure:
try: from codeop import CommandCompiler except ImportError: def CommandCompiler(): from codeop import compile_command return compile_command
e quindi chiamare CommandCompiler
ogni volta che avrete la
necessità di un nuovo oggetto compilato.