Python捕获异常

时间:2014-10-07 02:28:28

标签: python exception

我在处理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

2 个答案:

答案 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属性来区分它。