Python 異常處理的實例詳解
與許多面向對象語言一樣,Python 具有異常處理,通過使用 try...except 塊來實現。
Note: Python v s. Java 的異常處理
Python 使用 try...except 來處理異常,使用 raise 來引發異常。Java 和 C++ 使用 try...catch 來處理異常,使用 throw 來引發異常。
異常在 Python 中無處不在;實際上在標準 Python 庫中的每個模塊都使用了它們,并且 Python 自已會在許多不同的情況下引發它們。在整本書中你已經再三看到它們了。
• 使用不存在的字典關鍵字 將引發 KeyError 異常。
• 搜索列表中不存在的值 將引發 ValueError 異常。
• 調用不存在的方法 將引發 AttributeError 異常。
• 引用不存在的變量 將引發 NameError 異常。
• 未強制轉換就混用數據類型 將引發 TypeError 異常。
在這些情況下,我們都在簡單地使用 Python IDE:一個錯誤發生了,異常被打印出來 (取決于你的 IDE,可能會有意地以一種刺眼的紅色形式表示),這便是。這叫做未處理異常;當異常被引發時,沒有代碼來明確地關注和處理它,所以異常被傳給置在 Python 中的缺省的處理,它會輸出一些調試信息并且終止運行。在 IDE 中,這不是什么大事,但是如果發生在你真正的 Python 程序運行的時候,整個程序將會終止。
然而,一個異常不一定會引起程序的完全崩潰。當異常引發時,可以被處理掉。有時候一個異常實際是因為代碼中的 bug (比如使用一個不存在的變量),但是許多時候,一個異常是可以預見的。如果你打開一個文件,它可能不存在。如果你連接一個數據庫,它可能不可連接或沒有訪問所需的正確的安全證書。如果知道一行代碼可能會引發異常,你應該使用一個 try...except 塊來處理異常。
1. 打開一個不存在的文件
>>> fsock = open("/notthere", "r") (1) Traceback (innermost last): File "<interactive input>", line 1, in ? IOError: [Errno 2] No such file or directory: '/notthere' >>> try: ... fsock = open("/notthere") (2) ... except IOError: (3) ... print "The file does not exist, exiting gracefully" ... print "This line will always print" (4) The file does not exist, exiting gracefully This line will always print (1) 使用內置 open 函數,我們可以試著打開一個文件來讀取 (在下一節有關于open 的更多內容)。但是那個文件不存在,所以這樣就引發 IOError 異常。因為我們沒有提供任何顯式的對 IOError 異常的檢查,Python 僅僅打印出某個關于發生了什么的調試信息,然后終止。
(2) 我們試圖打開同樣不存在的文件,但是這次我們在一個 try...except 內來執行它。
新聞熱點
疑難解答