python基礎 反射和異常

2021-08-08 03:51:38 字數 2032 閱讀 2134

反射:通俗的說就是你給乙個字串,我就能匹配到和字串相同的函式進行呼叫

反射舉例說明

def

bulk

(self):

print("%s is yelling……"%self.name)

class

dog(object):

def__init__

(self,name):

self.name=name

defeat(self,food):

print("%s is eating %s……",self.name,food)

d=dog("jack")

choice=input(">>:").strip()

#想實現輸入字串"eat"能匹配到類中的eat方法

'''if choice=="eat": #可以用這種方法實現,但是當我們要匹配的東西很多,就不現實了

d.eat()

'''#可以通過反射的機制實現

if hasattr(d,choice):#判斷類中是否有和choice匹配的方法

# getattr(d,choice)()#通過這個反射機制實現匹配後的呼叫,只要你輸入eat,它就會自動呼叫eat函式

func=getattr(d,choice)

func("饅頭tal")#可以傳遞引數

else:

# setattr(d,choice,bulk)#通過這個方法可以把任意函式裝進去與之匹配

# d.talk(d)#只要輸入talk(可以是其他任何名字)就可以呼叫到bulk函式,d.talk(d)中的,d.talk就相當於d.bulk,由於它不再是類的例項化,所以我們呼叫bulk時不能直接d.bulk(),需要給它顯示將物件d傳遞給它(當例項化的時候是python預設給它將d傳遞進去了,具體可以看部落格物件導向那節)。

setattr(d,choice,22)#將乙個屬性關聯到類中

print(getattr(d,choice))#輸入任意值,它都會出現屬性22

異常

異常處理

name=["jorocco","morocco","jack"]

data={}

try:

name[3]

data["name"]

except keyerror as e:

print("沒有這個key",e)

except indexerror as l:

print("列表操作錯誤",l)#抓到name[3]這個錯誤就直接蹦到這了,data["name"]這個就不執行了

else:#如果沒有錯誤就執行這個

print("一切正常")

finally:#不管有沒有錯這個都執行

print("不管有沒有錯,都執行")

'''也可以通過這個方法抓取錯誤,只是判斷不到到底是哪個錯誤,只知道有錯

try:

name[3]

data["name"]

except exception as e:#這個能抓所有的錯誤

print("出錯了",e)

'''

自定義異常

class

joroccoexception

(exception):

#自定義異常

def__init__

(self,msg):

self.message=msg

def__str__

(self):

return self.message

# return "sdf"

# def ma(self):

# return "sdf"

try:

raise joroccoexception("我的異常")#自定義觸發

except joroccoexception as e:

print(e)#列印的東西是 "我的異常"

python基礎 反射

反射 name alex name class teacher dic def show student self print show student def show teacher self print show teacher classmethod def func cls print h...

python 11 反射與異常

反射與異常加上類似於反射的檔案的操作都將在下面以 的形式體現。一,反射 coding utf 8 usr bin env python3 author book miki 主要學習 getattr setattr hasattr delattr defbulk self print s wangwa...

Python 八 異常處理與反射

try 塊 except exception as e 塊 將日誌寫在這裡,將錯誤資訊寫入日誌檔案 try 正 excrpt 抓取錯誤的 else 沒有錯誤的 finally 不管有沒有錯誤,都會執行 try 塊 塊except exception as obj print obj obj就是封裝了...