如何boto.storage_uri()
在 python 中包装一个调用,以便处理可能的异常?
3 回答
你关于博托的问题很好,不容易回答。Boto 异常层次结构设计不佳,最终确定要捕获的异常的唯一方法是查看 boto 源代码。
例如,如果您查看(在 Ubuntu 上)/usr/share/pyshared/boto/exception.py,您会看到有两个广泛的类:boto.exception.BotoClientError boto.exception.BotoServerError
许多异常源自这两个,尽管“客户端”和“服务器”的概念没有很好地定义,您可能需要检查两者以确保许多异常可能发生意外(如往常一样)。但是,诸如 boto.exception.NoAuthHandlerFound 之类的异常是直接从 Exception派生的,因此您必须单独检查它。
不幸的是,从查看代码来看,在 Boto 中定义异常层次结构似乎既没有一致性也没有太多注意,这是 Boto 设计中的一个缺陷,不幸的是,它要求您依赖比通常推荐的更广泛的异常检查。
第一个问题是这个调用可能会产生什么异常?您不想用任何语言制作一揽子异常处理程序。您应该首先查看Boto 文档,看看它是否记录了您可能从给定调用中看到的异常,但如果没有,我会先尝试:
try:
uri = boto.storage_uri()
except Exception, e:
print e
或者记录异常(使用logging包exception
方法),但无论哪种方式,您都想记下您在测试时看到的异常类型以及是否应该特别处理其中的任何异常。您可能还想查看 Python 教程中有关Exceptions and Errors的部分。
查看 boto3 源代码, Boto3Error 被声明为所有 boto 错误的基础。所以,你可能可以这样做:
try:
boto.storage_uri()
except Boto3Error:
# handle errors