2017-10-08 96 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

是的,你是对的,这有点尴尬!它工作正常,没有抛出异常。将来我不会添加自定义异常! –