1. 程式人生 > >少說話多寫程式碼之Python學習045——類07(異常)

少說話多寫程式碼之Python學習045——類07(異常)

異常是程式遇到錯誤了,這種錯誤有的是已知的,可預判的。有些是未知的,莫名其妙的。
比如,

s=1/0
print(s)

輸出

Traceback (most recent call last):
  File "D:/work/Python/Class7.py", line 4, in <module>
    s=1/0
ZeroDivisionError: division by zero

對於一段程式碼,如果認為可能出現異常,可以對整段程式碼進行捕獲異常。

try:
    b=0
    s=1/b
    print(s)
except Exception:
   print('出現異常:沒有區分異常的種類')

輸出

出現異常:沒有區分異常的種類

捕獲異常後可以像上面這樣列印一個提示,也可以用raise丟擲。交由呼叫的地方去捕獲或者處理。

完整的異常捕獲其實是這樣,

try:
    b=0
    s=1/b
    print(s)
except Exception:
   print('出現異常:沒有區分異常的種類')
finally:
    b=1
    s=1/b
    print(s)

輸出

出現異常:沒有區分異常的種類
1.0

上面程式碼中except Exception:處,可以有多個 except,比如,except  ZeroDivisionError:。有興趣可以試試。

對於異常的語法其實大可不必深究和鑽研,只需要會在你認為可能出錯的地方捕獲,然後處理或者丟擲異常即可。
捕獲異常有一個強大手段就是捕獲所有異常,叫Exception,當然很多程式設計師認為捕獲所有異常無法彰顯出自己的技術是多麼的牛逼,所以,會用一用一些程式語言中建立好的有針對性的異常,比如Python中有這些是建立好的異常。
Exception,任何異常
AttributeError,引用或則賦值失敗異常
IOError,開啟不存在的檔案的異常
IndexError,使用序列中不存在的索引的異常
KeyError,使用對映中不存在的key的異常
NameError,找不到變數的異常
SyntaxError,程式碼形式錯誤的異常
TypeError,函式應用錯誤的型別的異常
ValueError,物件使用不合適的值的異常
ZeroDivisionError,除數為0的異常
對於有些程式設計師來說使用庫裡建立的異常不算本事,所以也可以自己建立異常。哎,如果碰到秀技術的也確實沒辦法,所以為了萬一碰到也好讀懂程式碼,可以簡單瞭解下自定義異常。

class MySelfException(Exception):
    pass
e=MySelfException

使用MySelfException和使用Exception一樣。

對於異常,有的時候需要捕獲自己處理,但是有的時候寧可讓異常丟擲甚至中斷程式,因為如果為了程式不崩潰而增加異常捕獲,會導致有些錯誤無法知道,從而導致運算結果完全錯誤,這樣造成的結果也許遠比程式崩潰要大的多。

工程檔案下載:https://download.csdn.net/download/yysyangyangyangshan/10792410