先引入一個網上找的表格
異常名稱 | 描述 |
---|---|
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會指明出現異常的種類和位置,我們只需要修正相應的地方就可以了!
比如這段代碼:
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來捕獲所有的異常,因爲這往往代表着我們不能通過異常去判斷哪裏出現了問題,因爲你的代碼跳過了所有可能。
其實,寫代碼本身就是一個細活,不能隨心所欲的寫,它有本身的規則的,我們在遇到問題的時候,一定要去想辦法找到問題,並解決它,這樣纔會有進步!