異常名稱 | 描述 |
---|---|
BaseException | 全部異常的基類 |
SystemExit | 解釋器請求退出 |
KeyboardInterrupt | 用戶中斷執行(一般是輸入^C) |
Exception | 常規錯誤的基類 |
StopIteration | 迭代器沒有更多的值 |
GeneratorExit | 生成器(generator)發生異常來通知退出 |
StandardError | 全部的內建標準異常的基類 |
ArithmeticError | 全部數值計算錯誤的基類 |
FloatingPointError | 浮點計算錯誤 |
OverflowError | 數值運算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (全部數據類型) |
AssertionError | 斷言語句失敗 |
AttributeError | 對象沒有這個屬性 |
EOFError | 沒有內建輸入,到達EOF 標記 |
EnvironmentError | 操做系統錯誤的基類 |
IOError | 輸入/輸出操做失敗 |
OSError | 操做系統錯誤 |
WindowsError | 系統調用失敗 |
ImportError | 導入模塊/對象失敗 |
LookupError | 無效數據查詢的基類 |
IndexError | 序列中沒有此索引(index) |
KeyError | 映射中沒有這個鍵 |
MemoryError | 內存溢出錯誤(對於Python 解釋器不是致命的) |
NameError | 未聲明/初始化對象 (沒有屬性) |
UnboundLocalError | 訪問未初始化的本地變量 |
ReferenceError | 弱引用(Weak reference)試圖訪問已經垃圾回收了的對象 |
RuntimeError | 通常的運行時錯誤 |
NotImplementedError | 還沒有實現的方法 |
SyntaxError | Python 語法錯誤 |
IndentationError | 縮進錯誤 |
TabError | Tab 和空格混用 |
SystemError | 通常的解釋器系統錯誤 |
TypeError | 對類型無效的操做 |
ValueError | 傳入無效的參數 |
UnicodeError | Unicode 相關的錯誤 |
UnicodeDecodeError | Unicode 解碼時的錯誤 |
UnicodeEncodeError | Unicode 編碼時錯誤 |
UnicodeTranslateError | Unicode 轉換時錯誤 |
Warning | 警告的基類 |
DeprecationWarning | 關於被棄用的特徵的警告 |
FutureWarning | 關於構造未來語義會有改變的警告 |
OverflowWarning | 舊的關於自動提高爲長整型(long)的警告 |
PendingDeprecationWarning | 關於特性將會被廢棄的警告 |
RuntimeWarning | 可疑的運行時行爲(runtime behavior)的警告 |
SyntaxWarning | 可疑的語法的警告 |
UserWarning | 用戶代碼生成的警告 |
今天要說的是,好多人在開始學習編程的時候,都會遇到各類各樣的報錯,然而出現問題後第一反應就是,唉呀,個人代碼錯了,怎麼辦?去問問別人吧!(python羣542110741) 這種想法是很可怕的,由於你逃避了問題,若是你仔細分析後再去請教,那麼下次遇到相似問題,就知道怎麼去處理了,這樣纔會有進步!python
好了,迴歸主題編程
通俗的說,異常就是錯誤,當咱們寫完代碼,運行它的時候,若是python沒法正常處理某一個或者一段代碼的時候就終止運行並出現報錯。學習
異常是一個對象(話說python中全部的東西均可以認爲是對象。)編碼
固然若是你的代碼自己就是錯的沒法運行,那麼也就別說出現什麼異常了。。。spa
通常狀況下,python會指明出現異常的種類和位置,咱們只須要修正相應的地方就能夠了!操作系統
好比這段代碼:code
a = 1 if a print(a)
很明顯的語法錯誤,那麼咱們只須要按照提示在a後面加上冒號就好了!對象
還有一種狀況下,出現了咱們沒法判斷的異常,好比作爬蟲的時候,有時候抓不到內容,代碼會返回空列表,然而咱們依然取列表中的值就會報錯:IndexError: list index out of range,或者requests.get()獲取網頁內容的時候,也可能會出現返回403的狀況,這類異常,咱們能夠用try/except語句來處理!教程
語法:索引
如下爲簡單的try....except...else的語法:
try: <語句> #運行代碼 except <名字>: <語句> #若是在try部份引起了<名字>異常 except <名字>,<數據>: <語句> #若是引起了<名字>異常,得到附加的數據 else: <語句> #若是沒有異常發生try的工做原理是,當開始一個try語句後,python就在當前程序的上下文中做標記,這樣當異常出現時就能夠回到這裏,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
- 若是當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就經過整個try語句(除非在處理異常時又引起新的異常)。
- 若是在try後的語句裏發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並打印缺省的出錯信息)。
- 若是在try子句執行時沒有發生異常,python將執行else語句後的語句(若是有else的話),而後控制流經過整個try語句。
使用except而不帶任何異常類型
你能夠不帶任何異常類型使用except,以下實例:
try: 正常的操做 ...................... except: 發生異常,執行這塊代碼 ...................... else: 若是沒有異常執行這塊代碼使用except而帶多種異常類型
你也可使用相同的except語句來處理多個異常信息,以下所示:
try: 正常的操做 ...................... except(Exception1[, Exception2[,...ExceptionN]]]): 發生以上多個異常中的一個,執行這塊代碼 ...................... else: 若是沒有異常執行這塊代碼
以上摘抄了一段內容(小編很懶的),全部的教程都會有相關的內容,你們看看就好
這裏要說的是,你們儘可能不要使用try-except來捕獲全部的異常,由於這每每表明着咱們不能經過異常去判斷哪裏出現了問題,由於你的代碼跳過了全部可能。
其實,寫代碼自己就是一個細活,不能爲所欲爲的寫,它有自己的規則的,咱們在遇到問題的時候,必定要去想辦法找到問題,並解決它,這樣纔會有進步!