python_異常處理_斷言
阿新 • • 發佈:2018-11-15
一、Python標準異常
常用異常 | |
Exception | 常規錯誤的基類 |
AttributeError | 試圖訪問一個物件沒有的屬性 |
IOError | 輸入/ 輸出異常,基本上是無法開啟檔案 |
ImportError | 無法引入模組或包,一般為路徑或名稱錯誤 |
IndentationError | 語法錯誤,程式碼沒有正確對齊(縮排錯誤) |
IndexError | 下標索引超出序列邊界 |
KeyError |
試圖訪問字典裡不存在的鍵 |
keyboardInterrupt | Ctrl+C被按下 |
NameError | 使用一個未被賦予的變數 |
SyntaxError | Python程式碼非法,程式碼不能編譯 |
UNboundLocalError | 試圖訪問一個還未被設定的區域性變數 |
ValueError | 傳入一個呼叫者不期望的值,即型別是正確的 |
TypeError | 對型別無效的操作 |
標準異常 | |
BaseException | 所有異常的基類 |
SystemExit | 直譯器請求退出 |
Stoplteration | 迭代器沒有更多的價值 |
GeneratorExit | 生成器(generator)傳送異常來通知退出 |
StandarError | 所有的內建標準異常的基類 |
ArithmeticError | 所有數值計算錯誤的基類 |
FloatingPointError | 浮點計算錯誤 |
OverflowError |
數值運算超出最大限制 |
ZerodivisionError | 除(或取模)零(所有資料型別) |
AssertionError | 斷言語句失敗 |
EOFError | 沒有內建輸入,到達EOF標記 |
EnvironmentError | 作業系統錯誤的基類 |
OSError | 作業系統錯誤 |
WindowsError | 系統呼叫失敗 |
ImportError | 無效資料查詢的基類 |
MemoryError | 記憶體溢位錯誤 |
ReferenceError | 弱引用(weak reference)試圖訪問已經垃圾回收了的物件 |
RuntimeError | 一般的執行時的錯誤 |
NotlmplementedError | 尚未實現的方法 |
TabError | Tab和空格混用 |
SystemError | 一般的直譯器系統錯誤 |
UnicodeError | Unicode相關的錯誤 |
UnicodeDecodeError | Unicode解碼時的錯誤 |
UnicodeEncodeError | Unicode編碼時錯誤 |
UnicodeTranslateError | Unicode轉換時錯誤 |
Warning | 警告的基類 |
DeprecationWarning | 關於被棄用的特徵的警告 |
Futurewarning | 關於構造將來語義會有所改變的警告 |
OverflowWarning | 舊的關於自動提升為長整型(long)的警告 |
PendingDeprecationWarning | 關於特性將會被廢棄的警告 |
RuntimeWarning | 可疑的執行時行為(runtime behavior)的警告 |
SyntaxWarning | 可疑的語法的警告 |
UserWarning | 使用者程式碼生成的警告 |
二、異常處理
1.
捕獲異常基礎寫法>>34
值 35
>>s
{invalid literal for int() with base 10: 's'} 我是一個錯誤。。
>>
result
2.
def yichang():
while(True):
try:
num = int(input('>>')) # 字元無法強制轉換為整型
num = num+1
print("值",num)
except (ValueError ,TypeError) as e:
print("我是一個呼叫者不期望的錯誤。。。",e)
except Exception as e: # e 是try ..except .. 捕獲到的異常,Exception 是基類(可以捕獲全部的異常)
print('{%s} 我是一個錯誤。。'% e)
else:
print("要是上面沒有錯會執行我。。else")
finally:
print('不管上面錯不錯誤【都會】執行我。。finally,yes,yes!!')
yichang()
異常處理完全~版~,yes!!
>>1
值 2
要是上面沒有錯會執行我。。else
不管上面錯不錯誤【都會】執行我。。finally,yes,yes!!
>>d
我是一個呼叫者不期望的錯誤。。。 invalid literal for int() with base 10: 'd'
不管上面錯不錯誤【都會】執行我。。finally,yes,yes!!
>>
result
三、斷言(assert)
明確的判斷前面的某個條件是否符合你的要求,如果不符合,程式就是根本走不下去的錯誤,直接退出或丟擲錯誤。例如:連線遠端的ftp , 沒有IP地址,就根本連線不上
q=2
try:
assert q == 1+1
assert q ==1+2 # 錯誤可以被抓住,但對於 這種錯誤最好不要去抓
except Exception as e:
print('我是被抓住的錯誤。。。%s' % e)
assert q ==1+1
assert 1 == 1+2
斷言
我是被抓住的錯誤。。。
Traceback (most recent call last):
File "D:/1.pycharm/day2018_11_15/斷言.py", line 21, in <module>
assert 1 == 1+2
AssertionError
result
關於斷言:https://www.cnblogs.com/shangren/p/8038935.html
斷言是用來檢查非法情況而不是錯誤情況的,用來幫開發者快速定位問題的位置。
異常處理用於對程式發生異常情況的處理,增強程式的健壯性和容錯性。