code --- 解釋器基礎類?
源代碼: Lib/code.py
code 模塊提供了在 Python 中實現 read-eval-print 循環的功能。它包含兩個類和一些快捷功能,可用于構建提供交互式解釋器的應用程序。
-
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的構造函數,以用作解釋器循環的默認命名空間。然后,如果提供了 banner 和 exitmsg ,實例的interact()方法會以此為標題和退出消息。控制臺對象在使用后將被丟棄。在 3.6 版更改: 加入 exitmsg 參數。
-
code.compile_command(source, filename="<input>", symbol="single")? 這個函數主要用來模擬 Python 解釋器的主循環(即 read-eval-print 循環)。難點的部分是當用戶輸入不完整命令時,判斷能否通過之后的輸入來完成(要么成為完整的命令,要么語法錯誤)。該函數 幾乎 和實際的解釋器主循環的判斷是相同的。
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,它會被放入異常來替代 Python 解析器所提供的默認文件名,因為它在從一個字符串讀取時總是會使用
'<string>'。 輸出將由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()? 從輸入緩沖區中刪除所有未處理的內容。
