Python 异常处理 - 最佳实践

4

我正在编写一个Python程序,用于访问数据库。当进行HTTP请求时,我希望捕获三种类型的异常,即超时、网络错误和HTTP错误。我正在寻找处理此类情况的最佳方法。我需要在代码的多个区域多次检查这些异常,每次都会像这样:

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次或更多次,我应该制作一个模块来处理这些异常吗?另外,在哪些情况下关闭系统而不仅仅显示消息是明智的?

谢谢。

1个回答

4

如果您不想使用装饰器,您也可以将所有except语句组合在一起,然后使用某个函数来处理您的异常(假设您的错误被称为TimeoutError,ConnectionError和HttpError…实际上并不重要)。例如:

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

1
好奇一下,当你使用 except (timeout, connection_error, http_error) as e: 时,这是否意味着 e 将是字符串 "timeout"、"connection_error"、"http_error",还是它将是实际的错误?另外,如果第一种情况成立,那么如何同时捕获实际的错误,例如 404 错误或类似的错误? - user1870035
2
我只是在模仿你的风格。你需要实际的错误信息,但是你可以将它们存储为变量。这意味着e存储了异常变量(类似于使用语句with open(path) as e:)。明确一点,错误类型将保持与分别执行三个版本时相同--因此如果你执行except (ValueError, TypeError) as e:e将是一个TypeErrorValueError - Jeff Tratner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接