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.