使用追蹤回傳來尋找錯誤

已完成

Python 中的例外狀況是語言的核心功能。 您可能會感到意外地看到產生錯誤的內容會反白顯示為功能。 這是因為強固的軟體工具似乎不會因為追蹤而損毀,(數行文字,指出錯誤如何啟動和結束)。

但例外狀況很有用,因為這些有助於產生描述性錯誤訊息來做出決策。 這些可協助您處理預期和非預期的問題。

追蹤回溯

「追蹤」是文字本文,可指向未處理錯誤的原點 (和結束)。 了解追蹤的元件可讓您在修正錯誤或偵錯無法正常運作的程式時更有效率。

第一次在 Python 中遇到例外狀況時,您可能會想要隱藏錯誤來避免錯誤。 當程式發生未處理的錯誤時,追蹤會顯示為輸出。 如您在本課程模組中所見,追蹤很有用。 有一些方式可以正確處理錯誤,因此錯誤不會出現或錯誤僅顯示有用的資訊。

開啟 Python 互動式工作階段,並嘗試開啟不存在的檔案:

open("/path/to/mars.jpg")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/mars.jpg'

該輸出有數個主要部分。 首先,追蹤會提及輸出的順序。 然後,這會通知您檔案是輸入的第一行上的 stdin (互動式終端中的輸入)。 錯誤是 FileNotFoundError (例外狀況名稱),這表示檔案不存在或檔案的目錄可能不存在。

這有許多資訊。 很難了解第 1 行的意義或 Errno 2 的意義為何。

在 Visual Studio Code 中開啟您想要的目錄,然後建立名為「open.py」的 Python 檔案。

Screenshot showing the creation of a new Python file in Visual Studio Code.

將下列內容新增到檔案並儲存:

def main():
    open("/path/to/mars.jpg")

if __name__ == '__main__':
    main()

這是開啟不存在的檔案所用的單一 main() 函式,就像之前一樣。 最後,此函式會使用 Python 協助程式,告知解譯器在終端上呼叫函式時執行 main() 函式。 使用 Python 在 Bash 終端中執行命令,並檢查錯誤訊息:

python3 open.py
Traceback (most recent call last):
  File "/tmp/open.py", line 5, in <module>
    main()
  File "/tmp/open.py", line 2, in main
    open("/path/to/mars.jpg")
FileNotFoundError: [Errno 2] No such file or directory: '/path/to/mars.jpg'

錯誤輸出現在更合理。 路徑指向名為 open.py的單一檔案。 輸出提及錯誤從第 5 行開始,其中包含對 main() 的呼叫。 接下來,輸出會遵循錯誤至 open() 函式呼叫中的第 2 行。 最後,FileNotFoundError 再次報告檔案或目錄不存在。

追蹤幾乎一律包含下列資訊:

  • 所有涉及的檔案路徑,針對每個函式的每個呼叫。
  • 與每個檔案路徑相關聯的行號。
  • 產生例外狀況所涉及的函式、方法或類別名稱。
  • 引發的例外狀況名稱。