異常處理
1.異常處理的作用是:
- 不想讓程式終止
- 如果出錯了,需要特殊處理,進而保證程式的穩定性和健壯性
2.捕獲異常可以使用 try/except 語句
- try/except 語句用來檢測 try 語句塊中的錯誤,進而讓 except 語句捕獲異常資訊并處理。
- 如果你不想在異常發生時結束你的程式,隻需在 try 裡捕獲它。
3.文法1
- try ... except ... else ...
- 當沒有異常發生時,else 中的語句将會被執行
- 當try代碼塊中存在異常報錯,則執行 except 下的代碼塊
- 可以通過 pass 占位符不處理結果
#捕獲所有的異常一
try:
...
except:
...
else:
...
#捕獲所有的異常二
try:
...
except Exception as e:
print e
else:
...
#同時捕獲多個異常,同時處理,對不同的異常做出相同的反應
try:
代碼段1
except(錯誤類型1,錯誤類型2,錯誤類型3,...):
代碼段2
else:
...
#同時捕獲多個異常,同時處理,對不同的異常做出不同的反應
try:
代碼段1
except(錯誤類型1):
代碼段2
except(錯誤類型2):
代碼段3
except(...):
...
else:
...
示例:
#指定異常類型
try:
fh = open("d:\\testfile", "r")
print (fh.read())
except IOError:
print ("Error: 沒有找到檔案或讀取檔案失敗")
else:
print ("内容寫入檔案成功")
fh.close()
#通過Exception擷取異常
try:
1/0
except Exception as e:
print (e)
else:
print ("ok")
#使用except而不帶任何異常類型
try:
1/0
except:
print ("error")
else:
print ("ok")
4.文法2
- try ... except ... finally ...
- 不論是否捕獲異常都會執行 finally
try:
代碼段1
except(錯誤類型1,錯誤類型2,錯誤類型3,......):
代碼段2
finally:
代碼段3
5.主動抛出異常
文法:
- raise 錯誤類型 - 程式執行到 raise 的時候直接抛出異常
- 注意:錯誤類型必須是一個類,并且這個類是 Exception 的子類
#輸入年齡,如果輸入的年齡的範圍不在0-100,程式就崩潰
age = int(input('年齡:'))
if age > 100 or age < 0:
raise ValueError
6.python 中标準異常如下
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 | 使用者代碼生成的警告 |
作者:多測師進階講師_鄭sir
微信:ZhengYing8887
出處:https://www.cnblogs.com/ZhengYing0813/
備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。