如何获取例外列表?

时间:2014-06-09 06:59:34

标签: python exception-handling

获取操作的可捕获异常列表的文档记录方法是什么?

我想避免使用非常非常糟糕的构造

try:
    # an operation
except:
    # do stuff if anything goes wrong

但为了做到这一点,我需要知道我能抓到什么,并采取相应的行动。

我知道有a list of built-in exceptions并且标准函数通常会记录它们的异常,但在使用API​​时没有用(例如Google Calendar API没有列出异常,但这些例子神秘地使用它们)。是否有一种标准方法可以与(希望)他们的文档一起查询异常?

2 个答案:

答案 0 :(得分:2)

您可以做的最好的事情是阅读文档。没有办法查询它。

考虑以下简单功能:

def add(x, y):
    return x + y

它可以抛出什么例外?答案是所有

class ExceptionThrower(object):
    def __init__(self, exception):
        self.exception = exception
    def __add__(self, other):
        raise self.exception

add(ExceptionThrower(AnyException), 3)会抛出您提供的任何异常。如果没有静态类型和显式Java风格的throws声明,几乎不可能知道函数会抛出什么类型的异常。你能做的最好的就是阅读文档,看看它的设计目的是什么。某些文档样式或函数注释可能允许以编程方式检查函数预期会抛出哪些异常,但没有任何标准或要求。

答案 1 :(得分:0)

要获取所有例外的列表,您可以运行:

exceptions = []
todo = set([Exception])
while todo:
    ex = todo.pop()
    exceptions.append(ex)
    todo.update(ex.__subclasses__())

但抛出哪些异常只能通过使用非法参数测试您的函数来查找。