2016-11-23 157 views
0

我写了下面的代码:蟒蛇处理多例外

try: 
    do_somethong 
except TimedOutException as e: 
    logger.exception(e) 
except Exception as e: 
    logger.exception(e) 

是这同下面的代码?

try: 
    do_somethong 
except (TimedOutException, Exception) as e: 
    logger.exception(e) 

我知道TimedOutExceptionException子类,我应该删除TimedOutException?任何人都可以为我解释?提前致谢!

回答

1

警告:except Exception as e:不应该被使用,因为它团体每一个从它inhetirts异常(最例外的从Exception继承除了一对夫妇蟒蛇相关的)

如果仍想使用异常,TimedOutException不会是必需的。

在处理异常时,每个异常都是except子句中使用的类的实例或其中的任何子类的处理,因此Exception基本上可以处理99%的异常。这就是为什么Exception不推荐作为这个purpouse的一个类,除非你只是记录并再次用raise提出同样的异常。

当使用多个except子句时,顺序很重要,因为任何异常只会由与该类型匹配的第一个except子句处理。

+0

嗯我以不同的方式解释这个问题,但我明白你现在想说什么。 –

+0

我会添加一些进一步的解释,使其更清晰。 – Adirio

+0

如果我想在引发TimedOutException时重试,第一种方法更好,但是如果我只是在引发每个异常时打印错误消息,我可以使用'Exception Exception',不需要添加'TimedOutException' , 是对的? – pangpang

1

except块使用,如果要应用不同的处理:如果应用相同的处理组在同一区块所有的异常

try: 
    do_somethong 
except TimedOutException as e: 
    # special processing for timeout 
    logger.exception(e) 
except Exception as e: 
    # different processing for all other exception 
    logger.exception(e) 
    exit(1) # say it is fatal for example... 

,并且不添加的类别已经存在异常的子类。