code —インタプリタ基本クラス
ソースコード: :source: `Lib / code.py`
code
モジュールは、Pythonでread-eval-printループを実装する機能を提供します。 インタラクティブなインタプリタプロンプトを提供するアプリケーションを構築するために使用できる2つのクラスと便利な関数が含まれています。
- 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, exitmsg=None)
read-eval-printループを実行するための便利な関数。 これにより、 InteractiveConsole の新しいインスタンスが作成され、 readfunc が InteractiveConsole.raw_input()メソッドとして使用されるように設定されます(提供されている場合)。 local が指定されている場合は、 InteractiveConsole コンストラクターに渡され、インタープリターループのデフォルトの名前空間として使用されます。 インスタンスの interact()メソッドは、バナーおよび exitmsg がバナーとして渡され、使用する終了メッセージ(提供されている場合)を使用して実行されます。 コンソールオブジェクトは使用後に破棄されます。
バージョン3.6で変更: exitmsg パラメーターが追加されました。
- code.compile_command(source, filename='<input>', symbol='single')
この関数は、Pythonのインタープリターメインループ(別名 read-eval-printループ)。 トリッキーな部分は、ユーザーが(完全なコマンドや構文エラーではなく)より多くのテキストを入力することで完了できる不完全なコマンドをいつ入力したかを判別することです。 この関数ほぼは、常に実際のインタープリターのメインループと同じ決定を行います。
source はソース文字列です。 filename は、ソースが読み取られたオプションのファイル名であり、デフォルトは
'<input>'
です。 記号はオプションの文法開始記号であり、'single'
(デフォルト)、'eval'
、または'exec'
である必要があります。コマンドが完全で有効な場合、コードオブジェクト(
compile(source, filename, symbol)
と同じ)を返します。None
コマンドが不完全な場合。 コマンドが完了して構文エラーが含まれている場合は SyntaxError を発生させ、コマンドに無効なリテラルが含まれている場合は OverflowError または ValueError を発生させます。
インタラクティブインタプリタオブジェクト
- InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')
インタプリタでいくつかのソースをコンパイルして実行します。 引数は compile_command()の場合と同じです。 ファイル名のデフォルトは
'<input>'
であり、シンボルのデフォルトは'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>'
を使用するため、Pythonのパーサーによって提供されるデフォルトのファイル名の代わりに例外に詰め込まれます。 出力は write()メソッドによって書き込まれます。
- InteractiveInterpreter.showtraceback()
発生したばかりの例外を表示します。 最初のスタックアイテムはインタープリターオブジェクトの実装内にあるため、削除します。 出力は write()メソッドによって書き込まれます。
バージョン3.5で変更:プライマリトレースバックだけでなく、フルチェーントレースバックが表示されます。
- InteractiveInterpreter.write(data)
- 標準エラーストリーム(
sys.stderr
)に文字列を書き込みます。 派生クラスはこれをオーバーライドして、必要に応じて適切な出力処理を提供する必要があります。
インタラクティブコンソールオブジェクト
InteractiveConsole クラスは InteractiveInterpreter のサブクラスであるため、インタープリターオブジェクトのすべてのメソッドと次の追加機能を提供します。
- InteractiveConsole.interact(banner=None, exitmsg=None)
インタラクティブなPythonコンソールを厳密にエミュレートします。 オプションの banner 引数は、最初のインタラクションの前に印刷するバナーを指定します。 デフォルトでは、標準のPythonインタープリターによって印刷されるものと同様のバナーが印刷され、その後に括弧で囲まれたコンソールオブジェクトのクラス名が続きます(これを実際のインタープリターと混同しないように、非常に近いためです)。
オプションの exitmsg 引数は、終了時に出力される終了メッセージを指定します。 空の文字列を渡して、終了メッセージを抑制します。 exitmsg が指定されていないか
None
の場合、デフォルトのメッセージが出力されます。バージョン3.4で変更:バナーの印刷を抑制するには、空の文字列を渡します。
バージョン3.6で変更:終了時に終了メッセージを出力します。
- InteractiveConsole.push(line)
- ソーステキストの行をインタプリタにプッシュします。 行の末尾に改行を含めることはできません。 内部改行がある場合があります。 この行はバッファに追加され、インタプリタの
runsource()
メソッドが、バッファの連結された内容をソースとして呼び出されます。 これがコマンドが実行されたか無効であることを示している場合、バッファはリセットされます。 それ以外の場合、コマンドは不完全であり、行が追加された後のバッファーがそのまま残ります。 さらに入力が必要な場合の戻り値はTrue
であり、何らかの方法で処理された場合はFalse
です(これはrunsource()
と同じです)。
- InteractiveConsole.resetbuffer()
- 未処理のソーステキストを入力バッファから削除します。
- InteractiveConsole.raw_input(prompt=)
- プロンプトを書いて、行を読みます。 返される行には、末尾の改行は含まれません。 ユーザーがEOFキーシーケンスを入力すると、 EOFError が発生します。 基本実装は
sys.stdin
から読み取ります。 サブクラスはこれを別の実装に置き換えることができます。