繁体   English   中英

Python捕获异常

[英]Python catch 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

我不太确定您要完成什么。 例如,您不能在调用查找之前检查键是否为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属性来区分它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM