工具標籤
Python異常處理
本文較為詳細的羅列了Python常見的異常處理,供大家參考,具體如下:
1. 拋出異常和自定義異常
Python用異常物件(exception object)表示異常狀況,遇到錯誤後,會引發異常。如果異常物件並未被處理或捕捉,程式就會用所謂的回溯(Traceback,一種錯誤訊息)終止執行。
①.raise 語句
Python中的raise 關鍵字用來引發一個例外,基本上和C#和Java中的throw關鍵字相同,如下所示:
# -- coding: utf-8 --
def ThorwErr():
raise Exception("抛出一个异常")
# Exception: 抛出一个异常
ThorwErr()raise關鍵字後面是拋出是一個通用的例外類型(Exception),一般來說拋出的例外越詳細越好,Python在exceptions模組內建了許多的異常類型,透過使用dir函數來查看exceptions中的異常類型,如下:
import exceptions # ['ArithmeticError', 'AssertionError'.....] print dir(exceptions)
##傳遞異常 ##捕捉到了異常,但是又想重新引發它(傳遞異常),可以使用不帶參數的raise語句即可:
##
# -- coding: utf-8 -- class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'Division by zero is illegal' else: raise
Python中也可以自訂自己的特殊類型的異常,只需要要從Exception類別繼承(直接或間接):
class SomeCustomException(Exception): pass
和C#中的try/catch類似,Python中使用try/except關鍵字來捕捉例外,如下:
# -- coding: utf-8 -- try: print 2/0 except ZeroDivisionError: print '除数不能为0'
#在一個except語句只捕捉其後宣告的例外類型,如果可能會拋出的是其他類型的異常就需要再增加一個except語句了,或者也可以指定一個更通用的異常類型比如:Exception,如下:
# -- coding: utf-8 -- try: print 2/'0' except ZeroDivisionError: print '除数不能为0' except Exception: print '其他类型异常'
為了捕獲多個異常,除了宣告多個except語句之外,還可以在一個except語句之後將多個異常作為元組列出來即可:
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '发生了一个异常'
每個異常都會有一些異常訊息,一般情況下我們應該把這些異常訊息記錄下來:
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception) as e: # unsupported operand type(s) for /: 'int' and 'str' print e
finally子句和try子句合併使用但是和except語句不同,finally不管try子句內部是否有異常發生,都會執行finally子句內的程式碼。所有一般情況下,finally自己常常用於關閉文件或在Socket中。
# -- coding: utf-8 -- try: print 2/'0' except (ZeroDivisionError,Exception): print '发生了一个异常' finally: print '不管是否发生异常都执行'
相關影片
熱AI工具
免費脫衣圖片
用於從照片中去除衣服的線上人工智慧工具。
人工智慧驅動的應用程序,用於創建逼真的裸體照片
人工智慧支援投資研究,做出更明智的決策
熱門文章
熱門話題
20476
7
13607
4
11948
4
8956
17
8495
7
熱門工具
好用且免費的程式碼編輯器
中文版,非常好用
強大的PHP整合開發環境
視覺化網頁開發工具
神級程式碼編輯軟體(SublimeText3)












![PHP實戰開發極速入門: PHP快速創建[小型商業論壇]](https://img.php.cn/upload/course/000/000/035/5d27fb58823dc974.jpg)
