Python 基礎之 異常處理
python 基礎之異常處理
說到異常處理,就得先問一下,什麽是異常處理? 先來看一下,什麽是異常? 異常就是:程序運行時發出的錯誤的信號。
異常的種類先來看一下:
一、常見的異常
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x IOError 輸入/輸出異常;基本上是無法打開文件 ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典裏不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還未被賦予對象的變量 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了) TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量, 導致你以為正在訪問它 ValueError 傳入一個調用者不期望的值,即使值的類型是正確的
二、不常見的異常
ArithmeticError AssertionError AttributeError BaseException BufferError BytesWarning DeprecationWarning EnvironmentError EOFError Exception FloatingPointError FutureWarning GeneratorExit ImportError ImportWarning IndentationError IndexError IOError KeyboardInterrupt KeyError LookupError MemoryError NameError NotImplementedError OSError OverflowError PendingDeprecationWarning ReferenceError RuntimeError RuntimeWarning StandardError StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TypeError UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning ValueError Warning ZeroDivisionError 更多異常更多的異常
接下來再談何為異常處理?
python解釋器檢測到錯誤,觸發異常(也允許程序員自己觸發異常)
程序員編寫特定的代碼,專門用來捕捉這個異常(這段代碼與程序邏輯無關,與異常處理有關)
如果捕捉成功則進入另外一個處理分支,執行你為其定制的邏輯,使程序不會崩潰,這就是異常處理
還有個現實的問題就是,為何要進行異常處理呢? 這個問題問的很有價值,進行異常處理就是為了讓程序更加的健壯,防止程序在運行過程中奔潰!!!
那如何進行異常處理呢?if 是否可以進行異常處理呢?是不是異常處理的方式只有 try .......except ...finally 這一種方式呢?
好了,現在就統一說明一下,if 是可以進行異常的處理的,但是if 在進行異常處理的過長中會有許多的問題:
1.if判斷式的異常處理只能針對某一段代碼,對於不同的代碼段的相同類型的錯誤你需要寫重復的if來進行處理。
2.在你的程序中頻繁的寫與程序本身無關,與異常處理有關的if,就像是在你的代碼中到處拉屎。可讀性極其的差
3.這是可以解決異常的,只是存在1,2的問題,所以,千萬不要妄下定論if不能用來異常處理。
我們再來看一下用 try .....except ...finally 的方式處理異常的基本方法
1. 基本語法:
1 try: 2 被檢測的代碼塊 3 except 異常類型: 4 try中一旦檢測到異常,就執行這個位置的邏輯
2.異常處理完整版:
try: a = input(‘>>>\n‘) int(a) b = input(‘>>>\n‘) int(b) except ValueError as e : print(e) else: print(‘你就是個大傻逼!!!!!‘) finally: print(‘無論如何我都要執行!!!‘) except 的代碼塊可以寫多個,就是呢向if else中的else一樣的多分支結構
3.主動觸發異常:
try: raise TypeError(‘類型錯誤‘) except Exception as e: print(e)
4. 自定義異常:
class EgonException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EgonException(‘類型錯誤‘) except EgonException as e: print(e)
簡單的總結一下:
什麽是異常,異常就是錯誤引發的結果
什麽是處理,由於異常帶來的是程序崩潰,處理的目的就是讓程序在異常後跳轉到其他邏輯去執行,不讓程序崩潰。
if本身就可以來處理異常,只不過if的方式,對於不同代碼段的同一種異常,需要重復寫多分支的if,而這段多分支if與真正的工作無關,寫多了你的程序可讀性就會及其的差。
try..except的方式,只是python提供給你一種特定的語法結構去做這件事,對於不同代碼的同一種異常,python為你定制了一中類型,一個expect就可以捕捉到。
Python 基礎之 異常處理