为什么不能捕获Exception而不是更具体的URLError?

时间:2011-07-18 07:12:44

标签: python

try:
    response = urllib2.urlopen(req)
except Exception, e:
    logger.exception(e)

在此代码段中是否有反对捕获Exception而不是urllib2.URLError的令人信服的论据?

3 个答案:

答案 0 :(得分:7)

可能有意外的原因可能会在此处提出您不知道或无法了解的异常。你编写你的程序,好像这里唯一的例外可能是urllib2.URLError,然后有一天urllib2的内部产生了一个不是其中之一的异常。这可能是一个错误,它可能只发生在满月上,它可能是你从未设计过的未来品牌。

如果发生这种情况,真的是否希望继续畅通无阻?

更一般地说,您捕获的异常类型是程序逻辑中不可或缺的一部分。如果你不够具体,你会有一个逻辑错误,故事结束 - 就像你从if陈述中省略一个条款一样。

答案 1 :(得分:1)

>>> import urllib2
>>> try: response = urllib2.urlopen(req)
... except Exception, e: print e
... 
name 'req' is not defined
>>> 

没有太多意义,也不是你的片段。

答案 2 :(得分:0)

好或不,取决于背景。如果只有一种类型的异常可以发生,或者你不关心单独处理不同类型的问题,那么简单地捕获Exception就完全没问题了。它也没有性能影响。但是,如果您的代码假定由其他人使用和修改,则可以提高可读性,从而提供特定的异常。