【发布时间】:2016-06-09 16:42:55
【问题描述】:
我一直在为 Google Big Query 提出例外问题。我终于想出了如何让它以它应该工作的方式工作,但我真的不明白它为什么工作。我希望更好地了解我的代码中发生了什么。我已经搜索过 Stack Overflow,但似乎没有任何帮助。
这是我的看法:
@api_view(['POST'])
def delete_table(request): # Deletes table from Big Query
project_id = request.POST.getlist('data[]')[0]
dataset_id = request.POST.getlist('data[]')[1]
table_id = request.POST.getlist('data[]')[2]
bq = BigQuery(project_id) # Instantiates BQ instance specific to project id
try:
bq.deleteTable(dataset_id, table_id) # Calls deleteTable method from BQ instance
except Exception, res:
logger.debug(res)
return Response('')
这是我在 Big Query 控制器中的删除方法:
def deleteTable(self, datasetId, tableId):
try:
response, content = \
self.http_auth.request("https://www.googleapis.com/bigquery/v2/projects/%s/datasets/%s/tables/%s" % (self.PROJECT_ID, datasetId, tableId), "delete")
content = json.loads(content)
message = content['error']['message']
raise Exception, message
except:
if response.status < 300:
message = tableId + " Was Deleted."
raise Exception, message
else:
raise Exception, message
我知道view 正在捕获来自bqcontroller 的引发错误,我不明白bqcontroller 中的错误是如何引发的。有人可以解释一下吗?
【问题讨论】:
-
为什么你抛出异常只是为了立即捕获它?
-
您的
try块包含raise语句,因此它总是引发异常。您肯定只想在except块中引发异常吗?同样在 except 块中,由于您提供自己的消息,因此您将丢失任何可能从 API 调用返回的特定消息。 -
您似乎使用异常来代替
return语句。您还发现了几乎所有异常。这里没有更具体的异常(或一组异常)要捕获吗?
标签: python django exception-handling google-api google-bigquery