# `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`가 발생하고, 유효하지 않은 리터럴이 있으면 `OverflowError` 나 `ValueError`가 발생합니다.

  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.