1. 程式人生 > >python 中的異常、單例

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__方法時,初始化動作就不會再次被執行了