python_異常報錯

1、報錯類型

AttributeError 試圖訪問一個對象沒有的樹形,好比foo.x,可是foo沒有屬性x
IOError 輸入/輸出異常;基本上是沒法打開文件
ImportError 沒法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標索引超出序列邊界,好比當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典裏不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(我的認爲這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是因爲另有一個同名的全局變量,
致使你覺得正在訪問它
ValueError 傳入一個調用者不指望的值,即便值的類型是正確的

 

2、捕獲異常

基本寫法:安全

try:
    .......要執行的代碼
except '寫入異常的類型':
    ..........跳過異常

 異常類只能用在指定的異常狀況,若是不能肯定異常的類型是不能使用的。服務器

 

萬能捕獲異常:spa

Exception 這個異常確實能捕捉全部的異常,可是出現的全部異常都只能執行Exception下的代碼。若是需求是出現什麼異常就走該異常下的代碼,就要換多分支的異常捕捉。 code

try:
    print('-------')
    print('-------')
    print('-------')
    print(y)
    print('======')
except NameError:
    print('11111')
except Exception as n: #Exception萬能捕捉異常
    print(n)

多分支:對象

try:
    print('-------')
    print('-------')
    print('-------')
    print(x)
    print('======')
except KeyError:
    pass
except NameError as n: #類型:值,能夠理解成k:v
    print(n)
else:#當try的代碼執行沒有報錯,就會執行這個代碼
    print('沒有異常的時候就執行這個代碼......')
finally: #不能tey except 的執行結果,最後都會執行這個代碼
    print('最後執行的代碼,作清理的代碼...')

 

 爲異常類附變量blog

try:
    print(yy)
eccept NameError as n: #NameError as n
    pass

 

 

 也能夠在多分支後面來一個Exception 索引

try:
    print('-------')
    print('-------')
    print('-------')
    print(y)
    print('======')
except NameError:
    pass
except KeyError:
    pass
except ValueError:
    pass
except Exception: #Exception萬能捕捉異常
    print()
'''
Python就是逐行讀取
'''

 

 

異常的其餘語句寫法:開發

try: .....except:.....else:....finally:.....it

try:
    print('-------')
    print('-------')
    print('-------')
    print(x)
    print('======')
except KeyError:
    pass
except NameError as n: #類型:值,能夠理解成k:v
    print(n)
else:#當try的代碼執行沒有報錯,就會執行這個代碼
    print('沒有異常的時候就執行這個代碼......')
finally: #不能tey except 的執行結果,最後都會執行這個代碼
    print('最後執行的代碼,作清理的代碼...')

 

finally:清理,好比:用戶登錄在輸入帳戶或密碼錯誤的時候,就應該要將該頁面從服務器端清理掉,否則當用戶反覆的去調取,就會使服務端死機。io

 

主動拋出異常:

try:
    raise TypeError('沒有這個key值')
except KeyError:
    pass
'''
Traceback (most recent call last):
    raise TypeError('沒有這個key值')
TypeError: 沒有這個key值
'''

 

 

自定義異常報錯:

class ad(BaseException):
    def __init__(self,msg):
        self.msg=msg
    def __str__(self):
        return self.msg

try:
    raise ad('類型錯誤')
except ad as e:
    print(e)

 

斷言:

在開發一個程序時候,與其讓它運行時崩潰,不如在它出現錯誤條件時就崩潰(返回錯誤)。這時候斷言assert 就顯得很是有用。

x = 1
y = 1
assert x == 4  #當不知足的時候,就不會往下執行代碼,
print(11111)

 

 

使用try..except的方式

1:把錯誤處理和真正的工做分開來
2:代碼更易組織,更清晰,複雜的工做任務更容易實現;
3:毫無疑問,更安全了,不至於因爲一些小的疏忽而使程序意外崩潰了;

 

儘可能少使用try....except,由於他的可讀性差。

相關文章
相關標籤/搜索