【问题标题】:How can I handle a boto exception in python?如何在 python 中处理 boto 异常?
【发布时间】:2017-02-24 09:59:54
【问题描述】:

如何在 python 中封装 boto.storage_uri() 调用,以便处理可能的异常?

【问题讨论】:

    标签: python boto


    【解决方案1】:

    你关于博托的问题很好,不容易回答。 Boto 异常层次结构设计不佳,最终确定要捕获的异常的唯一方法是查看 boto 源代码。

    例如,如果您查看(在 Ubuntu 上)/usr/share/pyshared/boto/exception.py,您会看到有两大类: boto.exception.BotoClientError boto.exception.BotoServerError

    许多异常都源自这两个,尽管“客户端”和“服务器”的概念没有得到很好的定义,您可能需要检查两者以确保许多异常可能发生意外(像往常一样)。但是,boto.exception.NoAuthHandlerFound 等异常直接来自 Exception,因此您必须单独检查它。

    不幸的是,通过查看代码,在 Boto 中定义异常层次结构似乎既没有一致性也没有太多注意,这是 Boto 设计中的一个缺陷,不幸的是,它要求您依赖比通常更广泛的异常检查推荐。

    【讨论】:

    • GaryWiz:感谢您的回答,我对 boto 和 botocore 有疑问。在某些情况下使用了 botocore。 botocore 与 boto 有何不同?
    【解决方案2】:

    第一个问题是这个调用可能会产生哪些异常?您不想用任何语言制作一揽子异常处理程序。您应该首先查看Boto documentation,看看它是否记录了您可能从给定调用中看到的异常,但如果没有,我会先尝试:

    try:
      uri = boto.storage_uri()
    except Exception, e:
      print e
    

    或记录异常(使用loggingexception 方法),但无论哪种方式,您都想记录在测试时看到的异常类型以及是否应该特别处理其中的任何异常。您可能还想查看Exceptions and Errors 上的 Python 教程部分。

    【讨论】:

    • 请不要在编辑中更改上述答案中使用的python代码的版本——这是Python2代码,不是Python3代码,不需要“固定”。
    【解决方案3】:

    查看 boto3 源代码,Boto3Error 被声明为所有 boto 错误的基础。所以,你可能可以这样做:

    try:
        boto.storage_uri()
    except Boto3Error:
        # handle errors
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多