code
— 인터프리터 베이스 클래스¶
소스 코드: Lib/code.py
code
모듈은 파이썬에서 REPL(read-eval-print loop)을 구현하는 기능을 제공합니다. 대화형 인터프리터 프롬프트를 제공하는 응용 프로그램을 만드는 데 사용할 수 있는 두 개의 클래스와 편리 함수들이 포함되어 있습니다.
- class code.InteractiveInterpreter(locals=None)¶
이 클래스는 구문 분석과 인터프리터 상태(사용자의 이름 공간)를 처리합니다; 입력 버퍼링이나 프롬프트 또는 입력 파일 이름 지정을 처리하지 않습니다 (파일명은 항상 명시적으로 전달됩니다). 선택적 locals 인자는 코드가 실행될 이름 공간으로 사용될 매핑을 지정합니다; 기본값은 키
'__name__'
이'__console__'
로 설정되고 키'__doc__'
이None
으로 설정된 새로 만들어진 딕셔너리입니다.
- class code.InteractiveConsole(locals=None, filename='<console>', local_exit=False)¶
대화형 파이썬 인터프리터의 동작을 가깝게 흉내 냅니다. 이 클래스는
InteractiveInterpreter
를 기반으로 하며 친숙한sys.ps1
과sys.ps2
를 사용하는 프롬프트와 입력 버퍼링을 추가합니다. local_exit가 참이면, 콘솔에서의exit()
와quit()
는SystemExit
를 발생시키지 않고, 대신 호출 코드로 돌아갑니다.버전 3.13에서 변경: local_exit 매개 변수가 추가되었습니다.
- code.interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=False)¶
REPL(read-eval-print loop)를 실행하는 편리 함수. 이것은
InteractiveConsole
의 새 인스턴스를 만들고, 제공된다면 readfunc가InteractiveConsole.raw_input()
메서드로 사용되도록 설정합니다. local이 제공되면 인터프리터 루프의 기본 이름 공간으로 사용하기 위해InteractiveConsole
생성자로 전달됩니다. local_exit가 제공되면InteractiveConsole
생성자로 전달됩니다. 그런 다음 인스턴스의interact()
메서드를 실행하는데, 제공된다면 banner와 exitmsg를 각각 배너와 종료 메시지로 사용하도록 전달합니다. 콘솔 객체는 사용 후에 폐기됩니다.버전 3.6에서 변경: exitmsg 매개 변수가 추가되었습니다.
버전 3.13에서 변경: local_exit 매개 변수가 추가되었습니다.
- code.compile_command(source, filename='<input>', symbol='single')¶
이 함수는 파이썬의 인터프리터 메인 루프(소위 REPL)를 흉내 내고 싶은 프로그램에 유용합니다. 까다로운 부분은 사용자가 후에 추가의 텍스트를 입력해서 완성할 수 있는 불완전한 명령을 입력했는지를 결정하는 것입니다 (완전한 명령이나 문법 에러가 아니라). 이 함수는 거의 항상 실제 인터프리터 메인 루프와 같은 결정을 내립니다.
source는 소스 문자열입니다; filename은 소스를 읽어 들인 선택적 파일명이며, 기본값은
'<input>'
입니다; 그리고 symbol은 선택적 문법 시작 기호이며'single'
(기본값),'eval'
또는'exec'
중 하나여야 합니다.명령이 완전하고 유효하면 코드 객체(
compile(source, filename, symbol)
와 같습니다)를 반환합니다; 명령이 불완전하면None
을 반환합니다; 명령이 완전하고 문법 에러가 있으면SyntaxError
를 발생시키고, 명령에 유효하지 않은 리터럴이 포함되었으면OverflowError
나ValueError
를 발생시킵니다.
대화형 인터프리터 객체¶
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')¶
인터프리터에서 소스를 컴파일하고 실행합니다. 인자는
compile_command()
와 같습니다; filename의 기본값은'<input>'
이고, symbol의 기본값은'single'
입니다. 여러 가지 중 하나가 발생할 수 있습니다:입력이 잘못되었습니다;
compile_command()
가 예외(SyntaxError
나OverflowError
)를 발생시켰습니다. 문법 트레이스백이showsyntaxerror()
메서드를 호출하여 인쇄됩니다.runsource()
는False
를 반환합니다.입력이 불완전하고, 더 많은 입력이 필요합니다;
compile_command()
가None
을 반환했습니다.runsource()
는True
를 반환합니다.입력이 완전합니다;
compile_command()
가 코드 객체를 반환했습니다. 코드는runcode()
(SystemExit
를 제외한 실행 시간 예외도 처리합니다)를 호출하여 실행됩니다.runsource()
는False
를 반환합니다.
반환 값은 다음 줄의 프롬프트에
sys.ps1
과sys.ps2
중 어느 것을 사용할지 결정하는 데 사용될 수 있습니다.
- InteractiveInterpreter.runcode(code)¶
코드 객체를 실행합니다. 예외가 발생하면,
showtraceback()
가 호출되어 트레이스백을 표시합니다. 전파가 허락된SystemExit
를 제외한 모든 예외를 잡습니다.KeyboardInterrupt
에 대한 노트: 이 예외는 이 코드의 어딘가에서 발생할 수 있으며, 항상 잡히지는 않습니다. 호출자는 이것을 처리할 준비가 되어 있어야 합니다.
- InteractiveInterpreter.showsyntaxerror(filename=None)¶
방금 발생한 문법 에러를 표시합니다. 스택 트레이스는 표시하지 않습니다, 문법 에러에는 그런 것이 없기 때문입니다. filename이 주어지면, 파이썬 구문 분석기가 제공하는 기본 파일명 대신에 예외에 채워집니다, 문자열에서 읽을 때는 항상
'<string>'
을 사용하기 때문입니다. 출력은write()
메서드로 기록됩니다.
- InteractiveInterpreter.showtraceback()¶
방금 발생한 예외를 표시합니다. 첫 번째 스택 항목을 제거합니다, 그것은 인터프리터 객체 구현에 속하기 때문입니다. 출력은
write()
메서드로 기록됩니다.버전 3.5에서 변경: 단지 기본(primary) 트레이스백이 아니라 전체 연결된(chained) 트레이스백이 표시됩니다.
- InteractiveInterpreter.write(data)¶
문자열을 표준 에러 스트림(
sys.stderr
)에 기록합니다. 파생 클래스는 필요에 따라 적절한 출력 처리를 제공하기 위해 이것을 재정의해야 합니다.
대화형 콘솔 객체¶
InteractiveConsole
클래스는 InteractiveInterpreter
의 서브 클래스이므로, 인터프리터 객체의 모든 메서드와 다음과 같은 추가 메서드를 제공합니다.
- InteractiveConsole.interact(banner=None, exitmsg=None)¶
대화형 파이썬 콘솔을 가깝게 흉내 냅니다. 선택적 banner 인자는 첫 번째 상호 작용 전에 인쇄할 배너를 지정합니다; 기본적으로 표준 파이썬 인터프리터가 출력하는 것과 비슷한 배너를 출력한 다음 괄호 안에 콘솔 객체의 클래스 이름을 출력합니다 (실제 인터프리터와 혼동하지 않도록 하기 위함입니다 – 너무 비슷합니다!).
선택적 exitmsg 인자는 종료할 때 인쇄되는 종료 메시지를 지정합니다. 종료 메시지를 표시하지 않으려면 빈 문자열을 전달하십시오. exitmsg가 주어지지 않았거나
None
이면, 기본 메시지가 인쇄됩니다.버전 3.4에서 변경: 배너 인쇄를 억제하려면, 빈 문자열을 전달하십시오.
버전 3.6에서 변경: 종료할 때 종료 메시지를 인쇄합니다.
- InteractiveConsole.push(line)¶
소스 텍스트 줄을 인터프리터로 밀어 넣습니다. line에는 후행 줄 바꿈이 없어야 합니다; 내부 줄 바꿈은 있을 수 있습니다. 줄은 버퍼에 추가되고 인터프리터의
runsource()
메서드가 이어붙인 버퍼의 내용을 소스로 하여 호출됩니다. 이것이 명령이 실행되었거나 유효하지 않았다고 알리면 버퍼는 재설정됩니다; 그렇지 않고 명령이 불완전하다면, 버퍼는 줄을 추가한 상태로 유지됩니다. 반환 값은 추가 입력이 필요하면True
이고, 어떤 식으로든 줄이 처리되었으면False
입니다 (runsource()
와 같습니다).
- InteractiveConsole.resetbuffer()¶
처리되지 않은 소스 텍스트를 입력 버퍼에서 제거합니다.