python 異常處理

來源:互聯網
上載者:User

標籤:end   讀寫   UI   one   word   rod   div   括弧   name   

異常處理錯誤與異常
  • 錯誤:程式運行前的文法問題,如:關鍵字、縮排、括弧不成對等

  • 異常:在程式運行過程中出現的錯誤,如:變數未定義、除數為0、屬性不存在等

異常處理
  • 說明:異常處理可以認為是一種特殊的流程式控制制語句,可以提高代碼的健壯性。

  • 文法:try-except

    try:
       print(‘正常執行‘)
       # print(a)
       print(3/0)
    except Exception as e:
       # Exception是所有異常的基類,因此此處可以捕獲所有異常
       print(‘出現異常,進行處理‘)
       print(e)
    ?
    print(‘其他代碼‘)
  • 捕獲多個異常:

    try:
       # print(a)
       # print(3/0)
       fp = open(‘123.txt‘)
    except NameError as e:
       print(‘NameError:‘, e)
    except ZeroDivisionError as e:
       print(‘ZeroDivisionError:‘, e)
    except Exception as e:
       print(‘other:‘, e)

    也可以對多種異常進行分組處理:


    try:
       # print(a)
       # print(3/0)
       fp = open(‘123.txt‘)
    except (NameError, ZeroDivisionError) as e:
       # 將特定的某些異常統一處理,寫到元組中即可
       print(e)
    except:
       print(‘其他異常‘)
  • else和finally


    try:
       print(‘正常執行‘)
       print(a)
    except:
       print(‘出現異常‘)
    else:
       # 出現異常就不執行了
       print(‘正常結束‘)
    finally:
       # 無論有誤異常都會執行
       print(‘無論如何都執行‘)

    else:在沒有異常的時候回執行,出現異常就不執行了

    finally:無論是否有異常,都會執行

  • 拋出異常:raise


    try:
       print(‘開始‘)
       # 根據代碼邏輯的需要,手動拋出特定的異常
       raise Exception(‘手動拋出異常‘)
       print(‘一切正常‘)
    except Exception as e:
       print(‘出現異常:‘, e)
    ?
    print(‘結束‘)
  • 異常嵌套:try-except結構中嵌套try-except結構


    print(‘我要去上班,什麼事情都不能阻止我上班的腳步‘)
    try:
       print(‘我準備騎電動車‘)
       raise Exception(‘昨天晚上那個缺德的傢伙把我充電器給拔了,無法騎車‘)
       print(‘騎電動車提前到達公司‘)
    except Exception as e:
       print(e)
       try:
           print(‘我準備坐公交‘)
           raise Exception(‘等了20分鐘一直沒有公交車,果斷放棄‘)
           print(‘坐公交準時到達公司‘)
       except Exception as e:
           print(e)
           print(‘我準備打車‘)
           print(‘打車還是快,一會就到公司了‘)
    ?
    print(‘熱情滿滿的開始一天的工作‘)
  • 自訂異常類:繼承自異常的基類(Exception)


    # 自訂異常類,名字通常以Exception結尾
    class MyException(Exception):
       def __init__(self, msg):
           self.msg = msg
    ?
       def __str__(self):
           # repr鍵變數轉換成字串,若本身是字串則不必要
           # return repr(self.msg)
           return self.msg
    ?
       def deal(self):
           print(‘異常已處理‘)
    ?
    try:
       print(‘正常執行‘)
       raise MyException(‘手動拋出定義異常‘)
    except MyException as e:
       print(e)
       e.deal()
  • 特殊使用

    • 情境:做檔案操作時,中間無論讀寫,也無論有誤異常,最終一定要把檔案關閉

    • with:使用with,不必再關係檔案的關閉問題,with語句塊結束後一定會確保檔案關閉


    # fp = open(‘test.txt‘, ‘rb‘)
    # # 各種讀寫操作
    # fp.close()
    ?
    # 使用with,無需關心檔案的關閉問題
    with open(‘test.txt‘, ‘rb‘) as fp:
       content = fp.read(5)
       print(content)

    ?

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.