2013-04-28 120 views
3

我在写一个python程序访问数据库。我想在发出http请求时捕获三种类型的异常。超时,网络错误和http错误。我正在寻找处理这种情况的最佳方法。我需要在我的代码多个区域多次检查这些例外,它会是这个样子,每次:Python异常处理 - 最佳实践

try: 

    //some request 

except timeout: 
    print '\nException: Timeout Error' 

except connection error: 
    print '\nException: Network Error' 

except http error, e: 
    print 'Exception: %s.' % e 

既然我有这个多次这样做,至少是可能的8个或更多,应该我创建一个模块来处理这些异常或不是?同样在哪些情况下,建议关闭我的系统而不是仅显示一条消息?

谢谢。

回答

3

如果你不想使用装饰器,你也可以组合所有的except语句,并使用一些函数来处理你的异常(假设你的错误被称为TimeoutError,ConnectionError和HttpError ...)真正重要的清晰度),即

try: 
    # do stuff 
except (TimeoutError, ConnectionError, HttpError) as e: 
    handle_exception(e) 
+0

出于好奇,当你做除外(超时,CONNECTION_ERROR,HTTP_ERROR)作为E:这是否意味着,电子将字符串“超时”,“CONNECTION_ERROR”,“HTTP_ERROR “,还是会是实际的错误?同样,如果第一部分是这种情况,那么你怎样捕捉实际的错误,例如404错误或其他性质? – CoffeeIsProgramming 2013-04-28 22:46:46

+1

我只是你的风格。你需要实际的错误;但是,您可以将它们存储为变量。它只是意味着'e'存储了异常变量(它类似于像'with open(path)'这样的语句作为e:'为了清楚起见,错误将保持相同的类型,如果你做了三个单独的版本 - 所以如果你把'except(ValueError,TypeError)'作为e:','e'将是一个'TypeError'或'ValueError' – 2013-04-28 23:01:21