使用字典
问题描述:
我想用户创建在一个循环中的不同实例中定义的串联串的使用字典
user_input = ('cat', 'cactus', 'cat')
其对应于一系列对象的从可能的对象的字典被实例化
classes = {
'cat': Cat,
'cactus': Cactus,
}
凡Cat
和Cactus
对应于类,其从父类下降
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)
答
捕获任何异常(except:
)是一个狡猾的做法,因为被隐藏与自己原来的例外,甚至没有记录它。
在这种情况下,这两个狡猾的实践相结合,藏,你有一个错字的事实,而你试图访问未定义pet_type
(单数),而不是你确实有变 - pet_types
(复数)。修复它,你应该没问题。
+0
是的,你是对的,这有点尴尬!它工作正常,没有抛出异常。将来我不会添加自定义异常! –
首先不使用毯子'try ... except'。什么是*实际异常*被提出? –
注意:当你可以直接循环'user_input'时,不要遍历'range()'。 –
我认为你正在寻找一个工厂模式。 https://en.wikipedia.org/wiki/Factory_method_pattern –