使用字典在循环中创建不同的实例

Creating different instances in a loop using a dictionary

我希望用户定义一系列字符串

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

对应于从可能对象的字典中实例化的一系列对象

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

其中 CatCactus 对应于父 class

的 classes
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')

但是当我这样做时,出现了异常,告诉我 "type no exist" 当字符串与字典条目完全对应时!为什么会这样?

然后我想像这样使用pet_types

pet_500 = pet_types[500](name,colour)

捕获任何异常 (except:) 是一种狡猾的做法,就像用您自己的异常隐藏原始异常一样,甚至不记录它。

在这种情况下,这两种狡猾做法的结合掩盖了您有错字的事实,并且您正在尝试访问未定义的 pet_type(单数),而不是您实际拥有的变量 - pet_types(复数)。修复它,你应该没问题。