程式開發常見問答集¶
常見問題¶
是否有具有中斷點和單步執行功能的原始碼級偵錯器?¶
有的。
下面描述了幾個 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 或執行靜態分析?¶
有的。
如何從 Python 腳本建立獨立的二進位檔案?¶
如果你想要的只是一個使用者可以下載並執行而無需先安裝 Python 發行版的獨立程式,則不需要將 Python 編譯為 C 程式碼的能力。有許多工具可以判斷程式所需的模組集,並將這些模組與 Python 二進位檔案綁定在一起以產生單個可執行檔。
一種方法是使用 freeze 工具,它被包含在 Python 原始碼樹中的 Tools/freeze。它將 Python 位元組碼轉換為 C 陣列;使用 C 編譯器,你可以將所有模組嵌入到一個新程式中,然後將其與標準 Python 模組連結。
它的工作原理是遞迴地掃描你的原始碼以查找引入陳述式(兩種形式)並在標準 Python 路徑和原始碼目錄(對於內建模組)中查找模組。然後它將用 Python 編寫的模組的位元組碼轉換為 C 程式碼(陣列初始化器可以使用 marshal 模組轉換為程式碼物件)並建立一個自訂的組態檔案,該檔案僅包含那些在程式中實際使用的內建模組。然後它編譯產生的 C 程式碼並將其與 Python 直譯器的其餘部分連結以形成一個獨立的二進位檔案,其行為與你的腳本完全一樣。
以下套件可以幫助建立 console 和 GUI 可執行檔案:
Nuitka(跨平台)
PyInstaller(跨平台)
PyOxidizer(跨平台)
cx_Freeze(跨平台)
py2app(僅限 macOS)
py2exe(僅限 Windows)
Python 程式碼是否有編碼標準或風格指南?¶
是的。標準函式庫模組所需的編碼風格稱為 PEP 8。
核心語言¶
為什麼當變數有值時,我仍得到錯誤訊息 UnboundLocalError?¶
在先前能正常運作的程式碼中,當透過在函式主體的某處新增賦值陳述式來修改時,得到 UnboundLocalError 可能會令人驚訝。
這段程式碼:
>>> x = 10
>>> def bar():
... print(x)
...
>>> bar()
10
可以執行,但是這段程式碼:
>>> x = 10
>>> def foo():
...