【问题标题】:Python Exception Handling - Best PracticesPython 异常处理 - 最佳实践
【发布时间】:2013-04-22 11:54:06
【问题描述】:

我正在编写一个访问数据库的 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 次或更多,我是否应该制作一个模块来处理这些异常?此外,在哪种情况下,最好关闭我的系统而不是只显示一条消息?

谢谢。

【问题讨论】:

    标签: python exception-handling error-handling connection timeout


    【解决方案1】:

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

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

    【讨论】:

    • 出于好奇,当您将 (timeout, connection_error, http_error) 设为 e: 时,这是否意味着 e 将是字符串“timeout”、“connection_error”、“http_error”,或者将这是实际的错误吗?此外,如果第一部分是这种情况,您如何捕获实际错误,例如 404 错误或类似性质的错误?
    • 我只是模仿你的风格。你需要实际的错误;但是,您可以将它们存储为变量。它只是意味着e 存储异常变量(它类似于with open(path) as e: 之类的 with 语句,需要明确的是,错误将保持相同的类型,就好像你做了三个不同的版本一样——所以如果你做了except (ValueError, TypeError) as e: , e 将是 TypeErrorValueError
    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 2017-05-11
    • 2013-05-09
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多