2017-10-08 135 views
2

我想用戶創建在一個循環中的不同實例中定義的串聯串的使用字典

user_input = ('cat', 'cactus', 'cat') 

其對應於一系列對象的從可能的對象的字典被實例化

classes = { 
    'cat': Cat, 
    'cactus': Cactus, 
} 

CatCactus對應於類,其從父類下降

class Pet(): 
    ... 

class Cat(Pet): 
    def __init__(self, name, colour): 
     Pet.__init__(self, name, colour) 
     ... 

class Cactus(Pet): 
    def __init__(self, name, colour): 
     Pet.__init__(self, name, colour) 
     ... 

我嘗試的對象類型添加到列表中

pet_types = [] 
for i in range(0,3): 
    try: 
     pet_type.append(classes[user_input[i]]) 
    except: 
     raise Exception('type no exist') 

但是,當我做到這一點,引發異常,告訴我「沒有輸入存在」當字符串完全對應於字典條目!這是爲什麼發生?

然後我想用pet_types這樣

pet_500 = pet_types[500](name,colour) 
+1

首先不使用毯子'try ... except'。什麼是*實際異常*被提出? –

+1

注意:當你可以直接循環'user_input'時,不要遍歷'range()'。 –

+0

我認爲你正在尋找一個工廠模式。 https://en.wikipedia.org/wiki/Factory_method_pattern –

回答

3

捕獲任何異常(except:)是一個狡猾的做法,因爲被隱藏與自己原來的例外,甚至沒有記錄它。

在這種情況下,這兩個狡猾的實踐相結合,藏,你有一個錯字的事實,而你試圖訪問未定義pet_type(單數),而不是你確實有變 - pet_types(複數)。修復它,你應該沒問題。

+0

是的,你是對的,這有點尷尬!它工作正常,沒有拋出異常。將來我不會添加自定義異常! –