如果boto3 client.put_object()不成功怎么办?

时间:2019-04-05 02:44:57

标签: python amazon-web-services boto3

client.put_object()的boto3文档未提及任何有关错误处理的内容。我的问题是该函数执行不成功时,是否总是引发异常或有时返回False或None值?

1 个答案:

答案 0 :(得分:0)

简短的答案是:是的,如果api调用由于任何问题而失败,它将抛出错误类botocore.exceptions.ClientError

如果成功,则boto3 s3 API调用put_object将返回一个dict对象作为响应,否则将不返回任何内容。

>>> import boto3

>>>
>>> s3_client = boto3.client('s3')
>>>
>>> s3_response = s3_client.put_object(Bucket='mybucket', Key='/tmp/new-pb.yml')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 312, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/lib/python2.7/site-packages/botocore/client.py", line 601, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
>>>
>>> print s3_response
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 's3_response' is not defined
>>>

尝试在try-except块内调用API调用会在方法失败时捕获ClientError,以便可以安全地处理它,从而避免了脚本在出现边缘情况或未被覆盖时的意外行为。

希望这对您有所帮助。