1. 程式人生 > >python_異常處理_斷言

python_異常處理_斷言

一、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.

捕獲異常基礎寫法
>>3435
>>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!!
>>12
要是上面沒有錯會執行我。。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

 

斷言是用來檢查非法情況而不是錯誤情況的,用來幫開發者快速定位問題的位置。
異常處理用於對程式發生異常情況的處理,增強程式的健壯性和容錯性。