1.反射通過字元串映射或修改程式運行時的狀態、屬性、方法 getattr(obj,name_str): 根據字元串name_str去獲取obj對象里的對應的方法的記憶體地址 hasttr(obj,name_str): 判斷一個對象obj里是否有對應的字元串的方法 setattr(obj,'y',z): ...
1.反射
通過字元串映射或修改程式運行時的狀態、屬性、方法
getattr(obj,name_str): 根據字元串name_str去獲取obj對象里的對應的方法的記憶體地址
hasttr(obj,name_str): 判斷一個對象obj里是否有對應的字元串的方法
setattr(obj,'y',z): setattr 函數對應函數 getatt(),用於設置屬性值,該屬性必須存在。
delattr(obj,'y'): 從給定的對象中刪除命名的屬性
class Dog(object): def __init__(self,name): self.name = name def eat(self): print('%s is eating ....'%self.name) d = Dog('xiaohei') #實例化對象 choice = input('>>>>:').strip() #strip()去除左右空格 if hasattr(d,choice): #檢查實例化d中有沒有choice func = getattr(d,choice) #getattr返回d中的choice的記憶體地址 func() #執行函數
2.異常基礎
在編程過程中為了增加友好性,在程式出現bug時一般不會將錯誤信息顯示給用戶,而是現實一個提示的頁面,通俗來說就是不讓用戶看見大黃頁。
1)基本結構
try: pass except Exception as e: pass
2)其他結構
#異常結構 try: # 主代碼塊 pass except KeyError as e: # 異常時,執行該塊 pass else: # 主代碼塊執行完,即不異常,執行該塊 pass finally: # 無論異常與否,都執行該塊 pass
3)主動觸發異常
try: raise Exception('錯誤...') except Exception as e: print(e)
3.常用的異常種類
AttributeError #試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError #輸入/輸出異常;基本上是無法打開文件
ImportError # 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError #語法錯誤(的子類) ;代碼沒有正確對齊
IndexError #下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError # 試圖訪問字典里不存在的鍵
KeyboardInterrupt # Ctrl+C被按下
NameError # 使用一個還未被賦予對象的變數
SyntaxError # Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError # 傳入對象類型與要求的不符合
UnboundLocalError # 試圖訪問一個還未被設置的局部變數,基本上是由於另有一個同名的全局變數,導致你以為正在訪問它
ValueError # 傳入一個調用者不期望的值,即使值的類型是正確的