Python捕获异常

2024-04-25 06:57:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难处理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

Tags: keyinselfnonechildtreereturnif
2条回答

我真的不知道你想做什么。例如,在调用lookup之前,不能检查键是否为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'

实现者显然认为这两个错误条件的处理方式是相同的,没有理由添加一些东西来区分它们。将此与包含数字代码的IOError进行对比。它是黑客和脆弱的,但你可以通过窥视异常对象上的message属性来分辨区别。你知道吗

相关问题 更多 >