如何获取异常列表?
怎么才能找到某个操作可以捕获的异常列表呢?
我想避免使用非常糟糕的写法
try:
# an operation
except:
# do stuff if anything goes wrong
但为了做到这一点,我需要知道我可以捕获哪些异常,并据此采取相应的措施。
我知道有内置异常的列表,而且标准函数通常会在文档中说明它们的异常,但这在使用一些API时就不太管用了(比如Google日历API没有列出异常,但示例代码里却神秘地用到了它们)。有没有什么标准的方法可以查询异常及其文档呢?
2 个回答
0
要获取所有异常的列表,你可以运行:
exceptions = []
todo = set([Exception])
while todo:
ex = todo.pop()
exceptions.append(ex)
todo.update(ex.__subclasses__())
不过,哪些异常会被抛出,你只能通过用不合法的参数来测试你的函数来发现。
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
声明,所以几乎不可能知道一个函数会抛出什么类型的异常。你能做的就是查看文档,看看这个函数设计时预期会抛出什么异常。有些文档风格或函数注释可能允许程序化检查一个函数预计会抛出的异常,但没有任何标准或强制要求。