codeop — 파이썬 코드 컴파일

소스 코드: Lib/codeop.py


codeop 모듈은 code 모듈에서와같이 파이썬 읽기-평가-인쇄 루프를 에뮬레이트 할 수 있는 유틸리티를 제공합니다. 결과적으로, 모듈을 직접 사용하고 싶지 않을 것입니다; 여러분의 프로그램에 이러한 루프를 포함 시키려면 대신 code 모듈을 사용하는 것이 좋습니다.

이 작업에는 두 가지 부분이 있습니다:

  1. Being able to tell if a line of input completes a Python statement: in short, telling whether to print ‘>>>’ or ‘...’ next.

  2. Remembering which future statements the user has entered, so subsequent input can be compiled with these in effect.

codeop 모듈은 이들을 각각 수행하는 방법과 이들을 모두 수행하는 방법을 제공합니다.

단지 전자를 수행하려면:

codeop.compile_command(source, filename='<input>', symbol='single')

Tries to compile source, which should be a string of Python code and return a code object if source is valid Python code. In that case, the filename attribute of the code object will be filename, which defaults to '<input>'. Returns None if source is not valid Python code, but is a prefix of valid Python code.

source에 문제가 있으면, 예외가 발생합니다. 유효하지 않은 파이썬 구문이 있으면 SyntaxError가 발생하고, 유효하지 않은 리터럴이 있으면 OverflowErrorValueError가 발생합니다.

The symbol argument determines whether source is compiled as a statement ('single', the default), as a sequence of statement ('exec') or as an expression ('eval'). Any other value will cause ValueError to be raised.

참고

구문 분석기가 source의 끝에 도달하기 전에 성공적인 결과로 구문 분석을 중지하는 것이 가능합니다 (하지만 대체로 그렇지 않습니다); 이 경우, 뒤따르는 기호는 에러를 유발하는 대신 무시 될 수 있습니다. 예를 들어, 백 슬래시 뒤에 두 개의 개행이 오면 그 뒤에 임의의 가비지가 올 수 있습니다. 구문 분석기를 위한 API가 개선되면 이 문제가 해결될 것입니다.

class codeop.Compile

이 클래스의 인스턴스는 내장 함수 compile()와 같은 서명의 __call__() 메서드를 갖지만, 인스턴스가 __future__ 문을 포함하는 프로그램 텍스트를 컴파일하면 인스턴스가 이를 ‘기억’하고 모든 후속 프로그램 텍스트를 이 문장의 효과 아래에서 컴파일한다는 차이점이 있습니다.

class codeop.CommandCompiler

Instances of this class have __call__() methods identical in signature to compile_command(); the difference is that if the instance compiles program text containing a __future__ statement, the instance ‘remembers’ and compiles all subsequent program texts with the statement in force.