如何在python中包装boto.storage_uri()
调用以便我可以处理可能的异常?
答案 0 :(得分:30)
关于Boto的问题很好,并不容易回答。 Boto异常层次结构的设计很差,最终确定要捕获的异常的唯一方法是查看boto源代码。
例如,如果您查看(在Ubuntu上)/usr/share/pyshared/boto/exception.py,您将看到有两大类: boto.exception.BotoClientError boto.exception.BotoServerError
许多例外都是从这两个例子中得出的,虽然“客户”和“服务器”的概念定义不是很明确,你可能想要检查两者,以确保可以发生意外的许多例外(像往常一样) )。但是,诸如boto.exception.NoAuthHandlerFound之类的异常是直接从Exception 派生的,因此您必须单独检查它。
不幸的是,通过查看代码,似乎在Boto中定义异常层次结构时既没有一致性也没有太多关注,这是Boto设计中的一个缺陷,遗憾的是,您需要依赖比通常更广泛的异常检查。推荐使用。
答案 1 :(得分:3)
第一个问题是这个电话可能产生的例外情况是什么?您不希望使用任何语言创建一个简单的异常处理程序。您应首先查看Boto documentation,看看它是否记录了您从给定调用中看到的异常,但如果不是,我会先尝试:
try:
uri = boto.storage_uri()
except Exception, e:
print e
或者记录异常(使用logging包exception
方法),但无论哪种方式,您都要记录您在测试时看到的异常类型以及是否应该处理任何异常他们特别。您还可以查看Exceptions and Errors上的Python教程部分。
答案 2 :(得分:0)
这应该有效:
try:
boto.storage_uri()
except ExceptionName:
# Exception
如果你想处理所有例外(我不推荐):
try:
boto.storage_uri()
except:
# Exception
阅读the documentation on exceptions and errors以获取更深入的信息。
答案 3 :(得分:0)
查看boto3源代码,Boto3Error被声明为所有boto错误的基础。所以,你可以这样做:
try:
boto.storage_uri()
except Boto3Error:
# handle errors