GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • code --- 直譯器基底類別
  • 引入模組
  • 回報錯誤
  • 改進此頁面
  • 顯示原始碼
  • 顯示翻譯原始碼
  • 索引
  • 模組
  • Python
  • 3.15.2 documentation
  • Python 標準函式庫 (Standard Library)
  • 自訂 Python 直譯器
  • codeop --- 編譯 Python 程式碼

This view

  • Original page
  • New address

GeezerVison is showing python.github.io — codeop --- 編譯 Python 程式碼 — Python 3.15.2 說明文件

codeop --- 編譯 Python 程式碼¶

原始碼:Lib/codeop.py


codeop 模組提供了可以模擬 Python read-eval-print 循環的工具程式 (utilities),就像在 code 模組中所做的那樣。因此你可能不想直接使用該模組;如果你想在程式中包含這樣的循環,你可能需要使用 code 模組。

這個任務有兩個部分:

  1. 能夠判斷一列輸入是否完成了一項 Python 陳述式:簡而言之,判斷接下來是列印 '>>>' 還是 '...'。

  2. 記住使用者輸入了哪些未來陳述式,以便後續輸入可以在這些陳述式生效的情況下進行編譯。

codeop 模組提供了一種完成上述每項任務的方法,以及同時完成這兩項任務的方法。

只做前者:

codeop.compile_command(source, filename='<input>', symbol='single')¶

嘗試編譯 source,它應該是 Python 程式碼的字串,如果 source 是有效的 Python 程式碼,則回傳一個程式碼物件 (code object)。在這種情況下,程式碼物件的檔案名稱屬性將為 filename,預設為 '<input>'。如果 source 不是有效的 Python 程式碼,而是有效 Python 程式碼的前綴,則回傳 None。

如果 source 有問題,就會引發例外。如果存在無效的 Python 語法則會引發 SyntaxError;如果存在無效的文字 (literal),則會引發 OverflowError 或 ValueError。

symbol 引數決定 source 是否編譯為陳述式('single',為預設值)、為陳述式序列 ('exec') 或為運算式 ('eval')。任何其他值都會導致引發 ValueError。

備註

剖析器 (parser) 有可能(但通常不會)在到達原始碼的結尾之前停止剖析並獲得成功的結果;在這種情況下,尾隨符號可能會被忽略而不是導致錯誤。例如,反斜線後面加上兩個換行符號後可以是任意的無意義符號。這個問題在未來會因為剖析器 API 的改善而被解決。

class codeop.Compile¶

此類別的實例具有 __call__() 方法,其簽名與內建函式 compile() 相同,區別在於如果實例編譯包含 __future__ 陳述式的程式文本,實例會「記住」並使用該陳述式開始編譯所有後續程式文本。

class codeop.CommandCompiler¶

此類別的實例具有 __call__() 方法,其簽名與內建函式 compile_command() 相同,區別在於如果實例編譯包含 __future__ 陳述式的程式文本,實例會「記住」並使用該陳述式開始編譯所有後續程式文本。

© 版權所有 2001 Python Software Foundation.
此頁面採用 Python 軟體基金會授權條款第 2 版。
文件中的範例、應用技巧與其他程式碼額外採用了 Zero Clause BSD 授權條款。
更多訊息請見歷史與授權條款。

Python 軟體基金會是一家非營利法人。 敬請捐贈。

最後更新於 11月 11, 2026 (06:44 UTC)。 發現 bug?
以 Sphinx8.2.3建立。
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.