code — 인터프리터 베이스 클래스¶
소스 코드: Lib/code.py
code 모듈은 파이썬에서 REPL(read-eval-print loop)을 구현하는 기능을 제공합니다. 대화형 인터프리터 프롬프트를 제공하는 응용 프로그램을 만드는 데 사용할 수 있는 두 개의 클래스와 편리 함수들이 포함되어 있습니다.
- class code.InteractiveInterpreter(locals=None)¶
- 이 클래스는 구문 분석과 인터프리터 상태(사용자의 이름 공간)를 처리합니다; 입력 버퍼링이나 프롬프트 또는 입력 파일 이름 지정을 처리하지 않습니다 (파일명은 항상 명시적으로 전달됩니다). 선택적 locals 인자는 코드가 실행될 이름 공간으로 사용될 매핑을 지정합니다; 기본값은 키 - '__name__'이- '__console__'로 설정되고 키- '__doc__'이- None으로 설정된 새로 만들어진 딕셔너리입니다.- Note that functions and classes objects created under an - InteractiveInterpreterinstance will belong to the namespace specified by locals. They are only pickleable if locals is the namespace of an existing module.
- 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()¶
- 처리되지 않은 소스 텍스트를 입력 버퍼에서 제거합니다.