code --- 解釋器基類(lèi)?

源代碼: Lib/code.py


code 模塊提供了在 Python 中實(shí)現 read-eval-print 循環(huán)的功能。它包含兩個(gè)類(lèi)和一些快捷功能,可用于構建提供交互式解釋器的應用程序。

class code.InteractiveInterpreter(locals=None)?

這個(gè)類(lèi)處理解析器和解釋器狀態(tài)(用戶(hù)命名空間的);它不處理緩沖器、終端提示區或著(zhù)輸入文件名(文件名總是顯示地傳遞)??蛇x的 locals 參數指定一個(gè)字典,字典里面包含將在此類(lèi)執行的代碼;它默認創(chuàng )建新的字典,其鍵 '__name__' 設置為 '__console__' ,鍵 '__doc__' 設置為 None 。

class code.InteractiveConsole(locals=None, filename='<console>')?

盡可能模擬交互式 Python 解釋器的行為。此類(lèi)建立在 InteractiveInterpreter 的基礎上,使用熟悉的 sys.ps1sys.ps2 作為輸入提示符,并有輸入緩沖。

code.interact(banner=None, readfunc=None, local=None, exitmsg=None)?

運行一個(gè) read-eval-print 循環(huán)的便捷函數。這會(huì )創(chuàng )建一個(gè)新的 InteractiveConsole 實(shí)例。如果提供了 readfunc ,會(huì )設置為 InteractiveConsole.raw_input() 方法。如果提供了 local ,則將其傳遞給 InteractiveConsole 的構造函數,以用作解釋器循環(huán)的默認命名空間。然后,如果提供了 bannerexitmsg ,實(shí)例的 interact() 方法會(huì )以此為標題和退出消息??刂婆_對象在使用后將被丟棄。

在 3.6 版更改: 加入 exitmsg 參數。

code.compile_command(source, filename='<input>', symbol='single')?

這個(gè)函數主要用來(lái)模擬 Python 解釋器的主循環(huán)(即 read-eval-print 循環(huán))。難點(diǎn)的部分是當用戶(hù)輸入不完整命令時(shí),判斷能否通過(guò)之后的輸入來(lái)完成(要么成為完整的命令,要么語(yǔ)法錯誤)。該函數 幾乎 和實(shí)際的解釋器主循環(huán)的判斷是相同的。

source 是源字符串;filename 是可選的用作讀取源的文件名,默認為 '<input>';symbol 是可選的語(yǔ)法開(kāi)啟符號,應為 'single' (默認), 'eval''exec'。

如果命令完整且有效則返回一個(gè)代碼對象 (等價(jià)于 compile(source, filename, symbol));如果命令不完整則返回 None;如果命令完整但包含語(yǔ)法錯誤則會(huì )引發(fā) SyntaxErrorOverflowError 而如果命令包含無(wú)效字面值則將引發(fā) ValueError。

交互解釋器對象?

InteractiveInterpreter.runsource(source, filename='<input>', symbol='single')?

在解釋器中編譯并運行一段源碼。 所用參數與 compile_command() 一樣;filename 的默認值為 '<input>',symbol 則為 'single'。 可能發(fā)生以下情況之一:

該返回值用于決定使用 sys.ps1 還是 sys.ps2 來(lái)作為下一行的輸入提示符。

InteractiveInterpreter.runcode(code)?

執行一個(gè)代碼對象。當發(fā)生異常時(shí),調用 showtraceback() 來(lái)顯示回溯。除 SystemExit (允許傳播)以外的所有異常都會(huì )被捕獲。

有關(guān) KeyboardInterrupt 的說(shuō)明,該異??赡馨l(fā)生于此代碼的其他位置,并且并不總能被捕獲。 調用者應當準備好處理它。

InteractiveInterpreter.showsyntaxerror(filename=None)?

顯示剛發(fā)生的語(yǔ)法錯誤。 這不會(huì )顯示堆?;厮菀驗檎Z(yǔ)法錯誤并無(wú)此種信息。 如果給出了 filename,它會(huì )被放入異常來(lái)替代 Python 解析器所提供的默認文件名,因為它在從一個(gè)字符串讀取時(shí)總是會(huì )使用 '<string>'。 輸出將由 write() 方法來(lái)寫(xiě)入。

InteractiveInterpreter.showtraceback()?

顯示剛發(fā)生的異常。 我們移除了第一個(gè)堆棧條目因為它從屬于解釋器對象的實(shí)現。 輸出將由 write() 方法來(lái)寫(xiě)入。

在 3.5 版更改: 將顯示完整的鏈式回溯,而不只是主回溯。

InteractiveInterpreter.write(data)?

將一個(gè)字符串寫(xiě)入到標準錯誤流 (sys.stderr)。 所有派生類(lèi)都應重載此方法以提供必要的正確輸出處理。

交互式控制臺對象?

InteractiveConsole 類(lèi)是 InteractiveInterpreter 的子類(lèi),因此它提供了解釋器對象的所有方法,還有以下的額外方法。

InteractiveConsole.interact(banner=None, exitmsg=None)?

近似地模擬交互式 Python 終端。 可選的 banner 參數指定要在第一次交互前打印的條幅;默認情況下會(huì )類(lèi)似于標準 Python 解釋器所打印的內容,并附上外加圓括號的終端對象類(lèi)名(這樣就不會(huì )與真正的解釋器混淆 —— 因為確實(shí)太像了?。?/p>

可選的 exitmsg 參數指定要在退出時(shí)打印的退出消息。 傳入空字符串可以屏蔽退出消息。 如果 exitmsg 未給出或為 None,則將打印默認消息。

在 3.4 版更改: 要禁止打印任何條幅消息,請傳遞一個(gè)空字符串。

在 3.6 版更改: 退出時(shí)打印退出消息。

InteractiveConsole.push(line)?

將一行源文本推入解釋器。 行內容不應帶有末尾換行符;它可以有內部換行符。 行內容會(huì )被添加到一個(gè)緩沖區并且會(huì )調用解釋器的 runsource() 方法,附帶緩沖區內容的拼接結果作為源文本。 如果顯示命令已執行或不合法,緩沖區將被重置;否則,則命令尚未結束,緩沖區將在添加行后保持原樣。 如果要求更多輸入則返回值為 True,如果行已按某種方式被處理則返回值為 False (這與 runsource() 相同)。

InteractiveConsole.resetbuffer()?

從輸入緩沖區中刪除所有未處理的內容。

InteractiveConsole.raw_input(prompt='')?

輸出提示并讀取一行。返回的行不包含末尾的換行符。當用戶(hù)輸入 EOF 鍵序列時(shí),會(huì )引發(fā) EOFError 異常。默認實(shí)現是從 sys.stdin 讀??;子類(lèi)可以用其他實(shí)現代替。