python之異常處理

來源:互聯網
上載者:User

標籤:sys   不同的   對齊   display   個人   lookup   style   表達   long   

第一:什麼是異常

 異常即是一個事件,該事件會在程式執行過程中發生,影響了程式的正常執行。

 在python中不同的異常可以用不同的類型(python中統一了類與類型,類型即類)去標識,不同的類對象標識不同的異常,一個異常標識一種錯誤

 常見的異常:

AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性xIOError 輸入/輸出異常;基本上是無法開啟檔案ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]KeyError 試圖訪問字典裡不存在的鍵KeyboardInterrupt Ctrl+C被按下NameError 使用一個還未被賦予對象的變數SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)TypeError 傳入物件類型與要求的不符合UnboundLocalError 試圖訪問一個還未被設定的局部變數,基本上是由於另有一個同名的全域變數,導致你以為正在訪問它ValueError 傳入一個調用者不期望的值,即使值的類型是正確的

標準異常:

BaseException    所有異常的基類SystemExit    解譯器請求退出KeyboardInterrupt    使用者中斷執行(通常是輸入^C)Exception    常規錯誤的基類StopIteration    迭代器沒有更多的值GeneratorExit        產生器(generator)發生異常來通知退出StandardError        所有的內建標準異常的基類ArithmeticError        所有數值計算錯誤的基類FloatingPointError    浮點計算錯誤OverflowError        數值運算超出最大限制ZeroDivisionError    除(或模數)零 (所有資料類型)AssertionError        Assert 陳述式失敗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            使用者代碼產生的警告
標準異常第二:錯誤

錯誤一般分為兩種:

  語法錯誤:這種錯誤不能繼續往下啟動並執行:

  eg:1.沒有對齊

     2.python3中print沒有加括弧

    等等

  邏輯錯誤:eg:

res=1+str(2)  
第三:異常處理

寫在前言:異常是由程式的錯誤引起的,文法上的錯誤跟異常處理無關,必須在程式運行前就修正

python解析器去執行程式,檢測到了一個錯誤時,觸發異常,異常觸發後且沒被處理的情況下,程式就在當前異常處終止,後面的代碼不會運行,誰會去用一個運行著突然就崩潰的軟體。

捕捉異常可以使用try/except語句。

try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常資訊並處理。

如果你不想在異常發生時結束你的程式,只需在try裡捕獲它。

文法:

以下為簡單的try....except...else的文法:

try:<語句>        #運行別的代碼except <名字>:<語句>        #如果在try部份引發了‘name‘異常except <名字>,<資料>:<語句>        #如果引發了‘name‘異常,獲得附加的資料

如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流程就通過整個try語句(除非在處理異常時又引發新的異常)。
如果在try後的語句裡發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程式的最上層(這樣將結束程式,並列印預設的出錯資訊)。
如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流程通過整個try語句。

eg:基本文法:

try:    fh = open("test", "w")    fh.write("這是一個測試檔案,用於測試異常!!")except IOError:    print "Error: 沒有找到檔案或讀取檔案失敗"else:    print "內容寫入檔案成功"    fh.close()

異常類處理指定的異常(如果沒有捕捉到,直接報錯):

try:    print(e)except NameError as e:    print(e)輸出結果:name ‘e‘ is not defined

多分支異常

d={‘a‘,1}try:    print(d[‘b‘])except NameError as e:    print(e)except TypeError as e:    print(e)輸出結果:‘set‘ object is not subscriptable

萬能異常

d={‘a‘,1}try:    print(c)    print(d[‘b‘])except Exception as e:    print(e)輸出結果:name ‘c‘ is not definedd={‘a‘,1}try:    print(d[‘b‘])    print(c)except Exception as e:    print(e)輸出結果:‘set‘ object is not subscriptable

else和finally

s1 = ‘hello‘try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)except Exception as e:   print(e)else:    print(‘try內代碼塊沒有異常則執行我‘)finally:    print(‘無論異常與否,都會執行該模組,通常是進行清理工作‘)# 輸出結果:# invalid literal for int() with base 10: ‘hello‘# 無論異常與否,都會執行該模組,通常是進行清理工作

自己挑起異常,想在哪裡有異常就在哪裡挑起異常

try:    raise NameError(‘未被賦值的對象‘)except NameError as e:    print(e)    輸出結果:未被賦值的對象
第四:自訂異常
class zzlException(BaseException):    def __init__(self,msg):        self.msg=msg    def __str__(self):        return self.msgtry:    raise zzlException(‘error‘)except zzlException as e:    print(e)    輸出結果:error
第五:斷言
   assert的異常參數,其實就是在斷言運算式後添加字串資訊,用來解釋斷言並更好的知道是哪裡出了問題   assert 2==1   assert 3==3

 

python之異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.