python 中的異常、單例
一、異常
1.異常
程式在執行的時候,如果python直譯器遇到一個錯誤,會停止程式,並提示一些錯誤資訊,這就是異常
2.捕獲異常
1)簡單的捕獲
簡單的捕獲異常語法 在一個程式開發中,如果對某些程式碼的執行不能確定(程式的語法完全正確)是否正確 (例如:提示使用者輸入一個整數,程式的能否正確執行,完全取決於使用者的輸入) 可以增加try來捕獲異常
解決簡單的錯誤問題
2)捕獲未知錯誤
錯誤型別的捕獲 在程式執行時,可能會遇到不同型別的異常, 並且需要針對不同型別的異常, 做不同的響應,這個時候,就需要捕獲錯誤型別了
捕獲未知錯誤: 在開發時,要預判到所有可能出現的錯誤,還是有一定的難度的 如果希望程式無論出現任何錯誤,都不會因為python直譯器丟擲異常而終止,可以再增加一個except 語法如下: except Exception as result(一個變數名 可以隨便寫): print ('未知錯誤 %s' % result)
需求: 1.提示使用者輸入一個整數 2.使用8除以使用者輸入的整數並且輸出
finally: print '無論是否出現錯誤都會執行的程式碼'
3.函式中的異常
1)異常一級一級的傳遞,最終去主程式中去找
2)丟擲異常 python中提供了一個Exception異常類 在開發時,如果滿足特定的業務需求時,希望丟擲異常,可以: 1.建立一個Exception的物件 2.使用raise關鍵字丟擲異常物件
丟擲raise異常 應用場景 在開發中,除了程式碼執行出錯python直譯器會丟擲異常之外 還可以根據應用程式特有的業務需求主動丟擲異常
丟擲異常 需求: 提示使用者輸入密碼,如果長度小於6位,就丟擲異常
3)斷言
斷言:可以理解為提前預言,讓人更好的知道錯誤的原因
二、單例
單例模式(Singleton Pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某一個類只有一個例項存在。當你希望在整個系統中,某個類只能出現一個例項時,單例物件就能派上用場。
設計模式: 設計模式是前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式就是針對 某一個問題的特定解決方案,使用設計模式是為了可重用程式碼,讓程式碼更容易被他人理解,保證程式碼的可靠性
1)下面用__new__來實現單例模式
2)介紹
我們建立物件的時候,python直譯器會幫我們做兩件事情,是哪兩件事情呢?1.為物件分配空間 2.物件初始化
使用類名()建立物件時,python的直譯器首先會呼叫__new__方法為物件分配空間 __new__是一個由object基類提供的內建的靜態方法,主要有兩個作用: 在記憶體中為物件分配空間 返回物件的引用
python的直譯器獲得物件的引用後,將引用作為第一個引數,傳遞給__init__方法 #__new__:負責給物件分配空間 __init__(初始化方法)負責給物件初始化
我們要重寫new方法,使用類名()建立物件的時候,返回的都是同一個地址
重寫__new__方法的程式碼非常固定: 繼承自父類方法 返回父類方法呼叫_new__方法的結果 重寫__new__方法一定要return object.__new__(cls) 否則python的直譯器得不到分配了空間的物件引用,就不會呼叫物件的初始化方法
兩次物件的記憶體地址一樣
3)只執行一次初始化方法
在每次使用 類名() 建立物件時,python的直譯器都會自動呼叫兩個方法 __new__ 分配空間 __init__ 物件初始化 但在上一小結中 __new__方法改造之後,每次都會得到第一次被建立物件的引用 但是:初始化方法還會被再次掉用
解決辦法: 1.定義一個類屬性 d 標記是否執行過初始化動作,初始值為false 2.在__init__方法中,判斷 d,如果為false就執行初始化動作 3.然後將 d 設定為trun 4.這樣,再次自動呼叫__init__方法時,初始化動作就不會再次被執行了