【问题标题】:catch errors if s3 file is not downloaded如果未下载 s3 文件,则捕获错误
【发布时间】:2021-12-09 03:08:11
【问题描述】:

我像这样从 S3 下载文件:

s3 = boto3.client('s3')
s3.download_file('testunzipping','DataPump_10000838.zip','/tmp/DataPump_10000838.zip')

现在它总是有效的。但是,我想添加某种错误处理。如果下载失败,我如何检查或收到错误消息。我怎么知道有问题?

boto3 是否提供任何错误处理功能?

我读到这个:Check if S3 downloading finish successfully,但我也在寻找替代品。

【问题讨论】:

标签: python python-3.x amazon-web-services amazon-s3 boto


【解决方案1】:

你可以有类似下面的东西。下载并确保它已创建。

import boto3 
import os


def download_and_verify(Bucket, Key, Filename):
  try:
    os.remove(Filename)
    s3 = boto3.client('s3')
    s3.download_file(Bucket,Key,Filename)
    return os.path.exists(Filename)
  except Exception: # should narrow the scope of the exception
    return False

【讨论】:

  • 在没有此功能的情况下单独下载,但是当我尝试使用该功能时,它给出了异常,后来出现[ERROR] FileNotFoundError:的错误
【解决方案2】:

这只是为了改进@balderman 的答案,实际检查导致您的 BOTO 请求失败的异常。

def download_and_verify(Bucket, Key, Filename):
  try:
    os.remove(Filename)
    s3 = boto3.client('s3')
    s3.download_file(Bucket,Key,Filename)
    return os.path.exists(Filename)
  except botocore.exceptions.ClientError as error:
    print(error.response['Error']['Code']) #a summary of what went wrong
    print(error.response['Error']['Message']) #explanation of what went wrong
    return False

【讨论】:

  • 我收到此错误ClientError: An error occurred (404) when calling the HeadObject operation:。除了boto3,我还需要为此导入哪些库?我用import botocore import os
  • 您收到此错误是作为响应错误消息还是作为代码本身的异常?
  • 我认为代码本身的例外。正常的 try catch 块可以工作,但不适用于 botocore 异常
  • 在我的情况下并不总是如此,boto 异常系统工作得很好,我也在使用 botocore 与 s3 连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
相关资源
最近更新 更多