程式開發常見問答集

常見問題

是否有具有中斷點和單步執行功能的原始碼級偵錯器?

有的。

下面描述了幾個 Python 偵錯器,內建函式 breakpoint() 允許你進入其中任何一個。

pdb 模組是一個簡單但足夠的 Python 控制台模式偵錯器。它是標準 Python 函式庫的一部分,並記錄在函式庫參考手冊中。你也可以參考 pdb 的程式碼作為範例來編寫自己的偵錯器。

IDLE 互動式開發環境,它是標準 Python 發行版的一部分(通常作為 idlelib 提供),包括一個圖形偵錯器。

PythonWin 是一個 Python IDE,它包含一個基於 pdb 的 GUI 偵錯器。 PythonWin 除錯器為斷點著色並具有許多很酷的功能,例如偵錯非 PythonWin 程式。 PythonWin 作為 pywin32 專案的一部分和作為 ActivePython 的一部分發佈。

Eric 是一個基於 PyQt 和 Scintilla 編輯元件所建構的 IDE。

trepan3k 是一個類似 gdb 的偵錯器。

Visual Studio Code 是一個整合了版本控制軟體與偵錯工具的 IDE。

有數個商業化 Python IDE 包含圖形偵錯器。這些包含:

有沒有工具能夠幫忙找 bug 或執行靜態分析?

有的。

RuffPylintPyflakes 進行基本檢查以幫助你儘早抓出錯誤。

靜態型別檢查器,例如 mypytyPyreflypytype 可以檢查 Python 原始碼中的型別提示。

如何從 Python 腳本建立獨立的二進位檔案?

如果你想要的只是一個使用者可以下載並執行而無需先安裝 Python 發行版的獨立程式,則不需要將 Python 編譯為 C 程式碼的能力。有許多工具可以判斷程式所需的模組集,並將這些模組與 Python 二進位檔案綁定在一起以產生單個可執行檔。

一種方法是使用 freeze 工具,它被包含在 Python 原始碼樹中的 Tools/freeze。它將 Python 位元組碼轉換為 C 陣列;使用 C 編譯器,你可以將所有模組嵌入到一個新程式中,然後將其與標準 Python 模組連結。

它的工作原理是遞迴地掃描你的原始碼以查找引入陳述式(兩種形式)並在標準 Python 路徑和原始碼目錄(對於內建模組)中查找模組。然後它將用 Python 編寫的模組的位元組碼轉換為 C 程式碼(陣列初始化器可以使用 marshal 模組轉換為程式碼物件)並建立一個自訂的組態檔案,該檔案僅包含那些在程式中實際使用的內建模組。然後它編譯產生的 C 程式碼並將其與 Python 直譯器的其餘部分連結以形成一個獨立的二進位檔案,其行為與你的腳本完全一樣。

以下套件可以幫助建立 console 和 GUI 可執行檔案:

Python 程式碼是否有編碼標準或風格指南?

是的。標準函式庫模組所需的編碼風格稱為 PEP 8

核心語言

為什麼當變數有值時,我仍得到錯誤訊息 UnboundLocalError?

在先前能正常運作的程式碼中,當透過在函式主體的某處新增賦值陳述式來修改時,得到 UnboundLocalError 可能會令人驚訝。

這段程式碼:

>>> x = 10
>>> def bar():
...     print(x)
...
>>> bar()
10

可以執行,但是這段程式碼:

>>> x = 10
>>> def foo():
...