1. raise語句用於引起一個異常,如raise Exception或者raise Exception('This is test')ide
2. 重要的異常類:函數
Exception: 全部異常的基類;對象
AttributeError: 特性引用或賦值失效時引起;繼承
IOError: 試圖打開不存在文件;索引
IndexError: 在使用序列中不存在的索引時引起;get
KeyError: 在使用映射中不存在的鍵時引起;it
NameError: 在找不到名字(變量)時引起;io
SyntaxError: 在代碼爲錯誤形式時引起;class
TypeError: 使用錯誤類型的對象;test
ValueError:使用正確類型的對象,可是使用了不合適的值;
ZeroDivisionError: 除法或者模除操做的第二個參數爲0
3. 使用try/except進行異常捕獲和錯誤處理;捕獲後想繼續傳遞異常,使用不帶任何參數的raise語句;
4. 捕獲多種異常的方法:使用多個except;使用except後跟一個異常類元組,except(TypeError, NameError);在異常類後面跟參數e, 能夠打印出異常錯誤信息;
5. 當但願捕獲全部的異常是,只需except後面不添加任何參數;
6. try/except後面跟else語句能夠執行無異常的代碼;而finally語句不管是否出現異常都會執行,經常使用於關閉文件或者套接字;
7. 類的構造方法是一個魔法方法,定義爲__init__,能夠指定除self之外的其餘參數;__del__爲析構方法,儘可能避免使用;
8. 重寫類的構造方法的兩種方式:
1)調用未綁定的超類的構造方法
class SongBird(Bird):
def __init__(self):
Bird.__init__(self)
...
2)使用super()函數,注意只在新式類中起做用,當繼承多個超類時也只須要調用一次
__metaclass__ = type
class SongBird(Bird):
def __init__(self):
super(SongBird, self).__init__()
...
9. 利用魔法方法集合能夠建立相似於序列或者映射的對象,如__len__(self)、__getitem__(self, key)、__setitem__(self, key, value)、__delitem__(self, key);也能夠經過繼承相關類(e.g. list)並進行重寫;
10. 在新式類中應儘可能避免用訪問器訪問屬性,而應該使用property(fget, fset, fdel, doc--)函數將訪問器定義爲屬性;
__metaclass__ = type
class Rectangle:
def __init(self):
self.width = 0
self.height = 0
def setSize(self, size):
self.width, self.height = size
def getSize(self):
return self.width, self.height
size = property(setSize, getSize)
11. 靜態方法沒有self參數,能夠被類自己直接調用;類方法定義時須要cls參數;
__metaclass__ = type
class MyClass:
@staticmethod
def smeth():
print 'This is a static method'
@classmethod
def cmeth(cls):
print 'This is a class method from', cls
12. 一個實現了__iter__方法的對象是可迭代的,一個實現了next方法的對象則是迭代器
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def next(self):
self.a, self.b = self.b, self.a+self.b
return self.a
def __iter(self):
return self
13. 任何包含yield語句的函數稱爲生成器,包含兩部分:生成器都函數和生成器的迭代器;生成器的方法:send()、throw()、close();