Python 基礎8 面向物件及相關
阿新 • • 發佈:2020-07-15
其他相關:
一、isinstance(obj, cls)
檢查是否obj是否是類 cls 的物件
1 class Foo(object): 2 3 pass 4 5 obj = Foo() 6 isinstance(obj, Foo)
二、issubclass(sub, super)
檢查sub類是否是 super 類的派生類
1 class Foo(object): 2 3 pass 4 5 class Bar(Foo): 6 7 pass 8 9 issubclass(Bar, Foo)
三、異常處理
1、異常基礎
在程式設計過程中為了增加友好性,在程式出現bug時一般不會將錯誤資訊顯示給使用者,而是現實一個提示的頁面,通俗來說就是不讓使用者看見大黃頁!!!
1 try: 2 pass 3 4 except Exception,ex: 5 pass
需求:將使用者輸入的兩個數字相加
1 while True: 2 num1 = raw_input('num1:') 3 num2 = raw_input('num2:') 4 try: 5 num1 = int(num1) 6 num2 = int(num2) 7 result = num1 + num2 8 except Exception, e: 9 printView Code'出現異常,資訊如下:' 10 print e
2、異常種類
python中的異常種類非常多,每個異常專門用於處理某一項異常!!!
1 AttributeError 試圖訪問一個物件沒有的樹形,比如foo.x,但是foo沒有屬性x 2 IOError 輸入/輸出異常;基本上是無法開啟檔案 3 ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤 4 IndentationError 語法錯誤(的子類) ;程式碼沒有正確對齊 5 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] 6 KeyError 試圖訪問字典裡不存在的鍵常用異常7 KeyboardInterrupt Ctrl+C被按下 8 NameError 使用一個還未被賦予物件的變數 9 SyntaxError Python程式碼非法,程式碼不能編譯(個人認為這是語法錯誤,寫錯了) 10 TypeError 傳入物件型別與要求的不符合 11 UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一個同名的全域性變數, 12 導致你以為正在訪問它 13 ValueError 傳入一個呼叫者不期望的值,即使值的型別是正確的 14 常用異常
1 ArithmeticError 2 AssertionError 3 AttributeError 4 BaseException 5 BufferError 6 BytesWarning 7 DeprecationWarning 8 EnvironmentError 9 EOFError 10 Exception 11 FloatingPointError 12 FutureWarning 13 GeneratorExit 14 ImportError 15 ImportWarning 16 IndentationError 17 IndexError 18 IOError 19 KeyboardInterrupt 20 KeyError 21 LookupError 22 MemoryError 23 NameError 24 NotImplementedError 25 OSError 26 OverflowError 27 PendingDeprecationWarning 28 ReferenceError 29 RuntimeError 30 RuntimeWarning 31 StandardError 32 StopIteration 33 SyntaxError 34 SyntaxWarning 35 SystemError 36 SystemExit 37 TabError 38 TypeError 39 UnboundLocalError 40 UnicodeDecodeError 41 UnicodeEncodeError 42 UnicodeError 43 UnicodeTranslateError 44 UnicodeWarning 45 UserWarning 46 ValueError 47 Warning 48 ZeroDivisionError 49 50 更多異常更多異常
dic = ["wupeiqi", 'alex'] try: dic[10] except IndexError, e: print e例項:IndexError
dic = {'k1':'v1'} try: dic['k20'] except KeyError, e: print e例項: KeyError
s1 = 'hello' try: int(s1) except ValueError, e: print e例項:ValueError
萬能異常 在python的異常中,有一個萬能異常:Exception,他可以捕獲任意異常,即:
1 s1 = 'hello' 2 try: 3 int(s1) 4 except Exception,e: 5 print e
接下來你可能要問了,既然有這個萬能異常,其他異常是不是就可以忽略了!
答:當然不是,對於特殊處理或提醒的異常需要先定義,最後定義Exception來確保程式正常執行。
1 s1 = 'hello' 2 try: 3 int(s1) 4 except KeyError,e: 5 print '鍵錯誤' 6 except IndexError,e: 7 print '索引錯誤' 8 except Exception, e: 9 print '錯誤'
3、異常其他結構
1 try: 2 # 主程式碼塊 3 pass 4 except KeyError,e: 5 # 異常時,執行該塊 6 pass 7 else: 8 # 主程式碼塊執行完,執行該塊 9 pass 10 finally: 11 # 無論異常與否,最終執行該塊 12 pass
4、主動觸發異常
1 try: 2 raise Exception('錯誤了。。。') 3 except Exception,e: 4 print e
5、自定義異常
1 class WupeiqiException(Exception): 2 def __init__(self, msg): 3 self.message = msg 4 5 def __str__(self): 6 return self.message 7 8 try: 9 raise WupeiqiException('我的異常') 10 11 except WupeiqiException,e: 12 print e #列印e時,會自動呼叫e物件的__str__()方法,獲取返回
6、斷言 用於強制使用者服從,不服從就報錯,一般不捕獲
1 # assert 條件 2 3 assert 1 == 1 4 5 assert 1 == 2
四、反射
python中的反射功能是由以下四個內建函式提供:hasattr、getattr、setattr、delattr,改四個函式分別用於對物件內部執行:檢查是否含有某成員、獲取成員、設定成員、刪除成員。
1 class Foo(object): 2 def __init__(self): 3 self.name = 'wupeiqi' 4 def func(self): 5 return 'func'
6 obj = Foo()
7 # #### 檢查是否含有成員 #### 8 hasattr(obj, 'name') 9 hasattr(obj, 'func')
10 # #### 獲取成員 #### 11 getattr(obj, 'name') 12 getattr(obj, 'func')
13 # #### 設定成員 #### 14 setattr(obj, 'age', 18) 15 setattr(obj, 'show', lambda num: num + 1) 16 17 # #### 刪除成員 #### 18 delattr(obj, 'name') 19 delattr(obj, 'func')
--------------------