codeop — Compila código Python¶
Código-fonte: Lib/codeop.py
The codeop module provides utilities upon which the Python
read-eval-print loop can be emulated, as is done in the code module. As
a result, you probably don’t want to use the module directly; if you want to
include such a loop in your program you probably want to use the code
module instead.
Há duas partes para esta tarefa:
Ser capaz de dizer se uma linha de entrada completa uma instrução Python: em suma, dizer se deve exibir ‘
>>>’ ou ‘...’ em seguida.Lembrar quais instruções futuras o usuário inseriu, para que as entradas subsequentes possam ser compiladas com essas declarações em vigor.
The codeop module provides a way of doing each of these things, and a way
of doing them both.
Para fazer apenas a primeira:
- codeop.compile_command(source, filename='<input>', symbol='single')¶
Tenta compilar source, que deve ser uma string de código Python e retornar um objeto código se source for um código Python válido. Nesse caso, o atributo de nome de arquivo do objeto código será filename, cujo padrão é
'<input>'. RetornaNonese source não é um código Python válido, mas é um prefixo de código Python válido.Se houver um problema com source, uma exceção será levantada.
SyntaxErroré levantada se houver sintaxe Python inválida, eOverflowErrorouValueErrorse houver um literal inválido.O argumento symbol determina se source é compilado como uma instrução (
'single', o padrão), como uma sequência de instruções ('exec') ou como uma expressão ('eval'). Qualquer outro valor fará com queValueErrorseja levantada.Nota
É possível (mas não provável) que o analisador sintático pare de analisar com um resultado bem-sucedido antes de chegar ao final da fonte; neste caso, os símbolos finais podem ser ignorados em vez de causar um erro. Por exemplo, uma barra invertida seguida por duas novas linhas pode ser seguida por lixo arbitrário. Isso será corrigido quando a API para o analisador for melhor.
- class codeop.Compile¶
Instâncias desta classe têm métodos
__call__()idênticos em assinatura à função embutidacompile(), mas com a diferença de que se a instância compilar o texto do programa contendo uma instrução__future__, a instância se “lembra” e compila todos os textos de programa subsequentes com a instrução em vigor.
- class codeop.CommandCompiler¶
Instâncias desta classe têm métodos
__call__()idênticos em assinatura acompile_command(); a diferença é que se a instância compila o texto do programa contendo uma instrução__future__, a instância se “lembra” e compila todos os textos do programa subsequentes com a instrução em vigor.