client.put_object()的boto3文档未提及任何有关错误处理的内容。我的问题是该函数执行不成功时,是否总是引发异常或有时返回False或None值?
答案 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
,以便可以安全地处理它,从而避免了脚本在出现边缘情况或未被覆盖时的意外行为。
希望这对您有所帮助。