如何在python中处理boto异常?

如何在python中处理boto异常?,python,boto,Python,Boto,如何用python包装一个boto.storage\u uri()调用,以便处理可能的异常?第一个问题是这个调用可能会生成什么异常?您不想用任何语言创建一个覆盖异常处理程序。您应该首先查看,看看它是否记录了您可能在给定调用中看到的异常,但如果不是,我会首先尝试: try: uri = boto.storage_uri() except Exception, e: print e 或者记录异常(使用packageexception方法),但无论哪种方法,您都希望记录在测试时看到的异常类型

如何用python包装一个
boto.storage\u uri()
调用,以便处理可能的异常?

第一个问题是这个调用可能会生成什么异常?您不想用任何语言创建一个覆盖异常处理程序。您应该首先查看,看看它是否记录了您可能在给定调用中看到的异常,但如果不是,我会首先尝试:

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

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

您关于Boto的问题很好,不容易回答。Boto异常层次结构设计得很糟糕,最终确定要捕获什么异常的唯一方法是查看Boto源代码

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

虽然“客户机”和“服务器”的概念没有很好的定义,但许多异常都是从这两个方面派生出来的,您可能希望检查这两个方面,以确保许多异常可能会意外发生(通常如此)。但是,boto.exception.NoAuthHandlerFound等异常是直接从异常派生的,因此您必须单独检查它


不幸的是,从代码来看,在定义Boto中的异常层次结构时似乎既不一致也不太谨慎,这是Boto设计中的一个缺陷,不幸的是,这要求您依赖比通常推荐的更广泛的异常检查。

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

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

加里维兹:谢谢你的回答,我对博托和博托科尔有怀疑。在某些情况下,使用botocore。botocore与boto有何不同?请不要在编辑中更改上述答案中使用的python代码的版本-这是Python2代码,不是Python3代码,不需要“修复”。不幸的是,您还需要了解botocore异常层次结构: