30.1. code --- インタプリタ基底クラス¶
ソースコード: Lib/code.py
code モジュールはread-eval-print (読み込み-評価-表示)ループをPythonで実装するための機能を提供します。対話的なインタプリタプロンプトを提供するアプリケーションを作るために使える二つのクラスと便利な関数が含まれています。
- 
class code.InteractiveInterpreter(locals=None)¶
- このクラスは構文解析とインタプリタ状態(ユーザの名前空間)を取り扱います。入力バッファリングやプロンプト出力、または入力ファイル指定を扱いません(ファイル名は常に明示的に渡されます)。オプションの locals 引数はその中でコードが実行される辞書を指定します。その初期値は、キー - '__name__'が- '__console__'に設定され、キー- '__doc__'が- Noneに設定された新しく作られた辞書です。
- 
class code.InteractiveConsole(locals=None, filename="<console>")¶
- 対話的なPythonインタプリタの振る舞いを厳密にエミュレートします。このクラスは - InteractiveInterpreterを元に作られていて、通常の- sys.ps1と- sys.ps2をつかったプロンプト出力と入力バッファリングが追加されています。
- 
code.interact(banner=None, readfunc=None, local=None)¶
- Convenience function to run a read-eval-print loop. This creates a new instance of - InteractiveConsoleand sets readfunc to be used as the- InteractiveConsole.raw_input()method, if provided. If local is provided, it is passed to the- InteractiveConsoleconstructor for use as the default namespace for the interpreter loop. The- interact()method of the instance is then run with banner passed as the banner to use, if provided. The console object is discarded after use.
- 
code.compile_command(source, filename="<input>", symbol="single")¶
- この関数はPythonのインタプリタメインループ(別名、read-eval-printループ)をエミュレートしようとするプログラムにとって役に立ちます。扱いにくい部分は、ユーザが(完全なコマンドや構文エラーではなく)さらにテキストを入力すれば完全になりうる不完全なコマンドを入力したときを決定することです。この関数は ほとんど の場合に実際のインタプリタメインループと同じ決定を行います。 - source はソース文字列です。filename はオプションのソースが読み出されたファイル名で、デフォルトで - '<input>'です。symbol はオプションの文法の開始記号で、- 'single'(デフォルト)または- 'eval'のどちらかにすべきです。- コマンドが完全で有効ならば、コードオブジェクトを返します( - compile(source, filename, symbol)と同じ)。コマンドが完全でないならば、- Noneを返します。コマンドが完全で構文エラーを含む場合は、- SyntaxErrorを発生させます。または、コマンドが無効なリテラルを含む場合は、- OverflowErrorもしくは- ValueErrorを発生させます。
30.1.1. 対話的なインタプリタオブジェクト¶
- 
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()がコードオブジェクトを返した場合。 (SystemExitを除く実行時例外も処理する)runcode()を呼び出すことによって、コードは実行されます。runsource()はFalseを返します。
 - 戻り値は、次の行のプロンプトに - sys.ps1か- sys.ps2のどちらを使うのか判断するために使えます。
- 入力が不正。 
- 
InteractiveInterpreter.runcode(code)¶
- コードオブジェクトを実行します。例外が生じたときは、トレースバックを表示するために - showtraceback()が呼び出されます。伝搬することが許されている- SystemExitを除くすべての例外が捉えられます。- KeyboardInterruptについての注意。このコードの他の場所でこの例外が生じる可能性がありますし、常に捕らえることができるとは限りません。呼び出し側はそれを処理するために準備しておくべきです。
- 
InteractiveInterpreter.showsyntaxerror(filename=None)¶
- 起きたばかりの構文エラーを表示します。複数の構文エラーに対して一つあるのではないため、これはスタックトレースを表示しません。 filename が与えられた場合は、Pythonのパーサが与えるデフォルトのファイル名の代わりに例外の中へ入れられます。なぜなら、文字列から読み込んでいるときはパーサは常に - '<string>'を使うからです。出力は- write()メソッドによって書き込まれます。
- 
InteractiveInterpreter.showtraceback()¶
- 起きたばかりの例外を表示します。スタックの最初の項目を取り除きます。なぜなら、それはインタプリタオブジェクトの実装の内部にあるからです。出力は - write()メソッドによって書き込まれます。- バージョン 3.5 で変更: 最初のトレースバックではなく、完全なトレースバックの連鎖が表示されます。 
- 
InteractiveInterpreter.write(data)¶
- 文字列を標準エラーストリーム( - sys.stderr)へ書き込みます。必要に応じて適切な出力処理を提供するために、派生クラスはこれをオーバーライドすべきです。
30.1.2. 対話的なコンソールオブジェクト¶
InteractiveConsole クラスは InteractiveInterpreter のサブクラスです。以下の追加メソッドだけでなく、インタプリタオブジェクトのすべてのメソッドも提供します。
- 
InteractiveConsole.interact(banner=None)¶
- 対話的な Python コンソールをそっくりにエミュレートします。オプションの banner 引数は最初のやりとりの前に表示するバナーを指定します。デフォルトでは、標準 Python インタプリタが表示するものと同じようなバナーを表示します。それに続けて、実際のインタプリタと混乱しないように (とても似ているから!) 括弧の中にコンソールオブジェクトのクラス名を表示します。 - バージョン 3.4 で変更: バナーの表示を抑制するには、空の文字列を渡してください。 
- 
InteractiveConsole.push(line)¶
- ソーステキストの一行をインタプリタへ送ります。その行の末尾に改行がついていてはいけません。内部に改行を持っているかもしれません。その行はバッファへ追加され、ソースとして連結された内容が渡されインタプリタの - runsource()メソッドが呼び出されます。コマンドが実行されたか、有効であることをこれが示している場合は、バッファはリセットされます。そうでなければ、コマンドが不完全で、その行が付加された後のままバッファは残されます。さらに入力が必要ならば、戻り値は- Trueです。その行がある方法で処理されたならば、- Falseです(これは- runsource()と同じです)。
- 
InteractiveConsole.resetbuffer()¶
- 入力バッファから処理されていないソーステキストを取り除きます。 
