我在处理lookup(self, key)
提出的两个例外时遇到了困难。两者都是ValueError
例外,但意味着完全不同的事情。我如何分别捕获这些异常,因为它们是相同类型的异常,但在捕获它们时需要不同的行为?谢谢!
@staticmethod
def _lookup_in_child(child, key):
if child:
return child.lookup(key)
else:
raise ValueError("Key not in tree: " + repr(key))
def lookup(self, key):
if key is None:
raise ValueError("None cannot be used as a key")
if self.key is None:
raise ValueError("Key not in tree: " + repr(key))
if key < self.key:
return self._lookup_in_child(self.left, key)
elif key > self.key:
return self._lookup_in_child(self.right, key)
else:
return self
答案 0 :(得分:1)
我不确定你要完成什么。例如,在调用查找之前,您无法检查密钥是否为None?假设您需要捕获异常,下面将执行此操作,然后您可以根据特定的异常情况添加所需的任何逻辑:
try:
lookup(key)
except ValueError, e:
if str(e) == 'None cannot be used as a key':
print 'None case'
elif str(e).startswith('Key not in tree:'):
print 'Nonexistent case'
else:
print 'Default case'
答案 1 :(得分:0)
实施者显然认为两个错误条件将被处理相同,并且没有理由添加某些东西来区分它们。将其与 IOError
进行对比,其中包含数字代码。它是hackish和fragile,但你可以通过查看异常对象的message属性来区分它。