1. 程式人生 > 實用技巧 >Python 基礎8 面向物件及相關

Python 基礎8 面向物件及相關

其他相關:

一、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         print
'出現異常,資訊如下:' 10 print e
View Code

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')

--------------------