1. 程式人生 > >python學習之異常處理

python學習之異常處理

python學習之異常處理

一、語法導致的異常,應該在程序運行前處理
例子:
print(

輸出:
File "E:/python/oldboyday9/learn1.py", line 4
    if
     ^
SyntaxError: invalid syntax

註:輸出分三個部分,第一部分錯我位置,第二部分SyntaxError錯誤類型,第三部分錯誤值invalid syntax

二、邏輯導致的錯誤
使用try...except捕獲異常並處理異常
例子:
try:
    a = 1/0
except Exception as e:
    print(‘error: ‘,e)
    
三、異常種類
AttributeError 試圖訪問一個對象沒有的屬性,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典裏不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由於另有一個同名的全局變量,
導致你以為正在訪問它
ValueError 傳入一個調用者不期望的值,即使值的類型是正確的

四、異常處理
python解釋器捕獲異常觸發異常處理,自己也可以觸發異常,編寫異常處理
try:
    代碼塊    #有異常觸發,執行except塊
except:
    執行處理異常
    
例子:
try:
    f = open(‘a.txt‘)
    g = (line.strip() for line in f)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
except StopIteration:    #捕獲stopiteration異常,執行關閉文件
    f.close()

異常類只能捕獲指定的異常,如果不是指定的異常,則報錯
例子:
s1 = ‘hello‘4 
try:
   int(s1)
except IndexError as e:
   print(e)
int(s1)不是指定的異常IndexError,所以報錯

多分支異常
例子:
s1 = ‘hello‘
try:
    int(s1)
except IndexError as e:
    print(e)
except KeyError as e:
    print(e)
except StopIteration as e:
    print(e)
    
萬能異常Exception
例子:
s1 = ‘hello‘
try:
    int(s1)
except Exception as e:
    print(e)
    
else子塊,沒有異常觸發else
例子:
s1 = ‘hello‘
try:
    int(s1)
except Exception as e:
    print(e)
else:
    print(‘沒有異常‘)    
    
finally子塊,有沒有異常都觸發finally
例子:
s1 = ‘hello‘
try:
    int(s1)
except Exception as e:
    print(e)
finally:
    print(‘都會觸發finally‘)
    
raise關鍵字主動觸發異常
例子:
try:
    raise TypeError(‘類型異常‘)
except Exception as e:
    print(e)
    
自定義錯誤類型
例子
class MyError(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

try:
    raise MyError(‘自定義錯誤類型‘)
except MyError as e:
    print(e)



本文出自 “linux技術” 博客,請務必保留此出處http://haoyonghui.blog.51cto.com/4278020/1942013

python學習之異常處理