我试图弄清楚如何使用boto3进行正确的错误处理。
我正在尝试创建一个IAM用户:
def create_user(username, iam_conn):
try:
user = iam_conn.create_user(UserName=username)
return user
except Exception as e:
return e
成功调用create_user后,我得到一个整洁的对象,其中包含API调用的http状态代码和新创建的用户的数据。
例:
{'ResponseMetadata':
{'HTTPStatusCode': 200,
'RequestId': 'omitted'
},
u'User': {u'Arn': 'arn:aws:iam::omitted:user/omitted',
u'CreateDate': datetime.datetime(2015, 10, 11, 17, 13, 5, 882000, tzinfo=tzutc()),
u'Path': '/',
u'UserId': 'omitted',
u'UserName': 'omitted'
}
}
这很好。但是,如果失败(例如用户已经存在),我只会得到一个类型为botocore.exceptions.ClientError的对象,其中只有文本可以告诉我出了什么问题。
示例:ClientError(’调用CreateUser操作时发生错误(EntityAlreadyExists):名称省略的用户已经存在。’,)
此(AFAIK)使得错误处理变得非常困难,因为我不能仅打开生成的http状态代码(根据IAM的AWS
API文档,该用户的409已经存在)。这使我认为我必须以错误的方式做某事。最佳的方式是让boto3永远不会抛出异常,但是突出部分总是返回一个反映API调用过程的对象。
谁能在这个问题上启发我或为我指明正确的方向?
使用异常中包含的响应。这是一个例子:
import boto3
from botocore.exceptions import ClientError
try:
iam = boto3.client('iam')
user = iam.create_user(UserName='fred')
print("Created user: %s" % user)
except ClientError as e:
if e.response['Error']['Code'] == 'EntityAlreadyExists':
print("User already exists")
else:
print("Unexpected error: %s" % e)
异常中的响应字典将包含以下内容:
['Error']['Code']
例如“ EntityAlreadyExists”或“ ValidationError”['ResponseMetadata']['HTTPStatusCode']
例如400['ResponseMetadata']['RequestId']
例如’d2b06652-88d7-11e5-99d0-812348583a35’['Error']['Message']
例如“发生错误(EntityAlreadyExists)…”['Error']['Type']
例如“发件人”有关更多信息,请参见:
[更新时间:2018-03-07]
AWS Python
SDK已开始在您可以显式捕获的客户端上公开服务异常(尽管不是在resource上),因此现在可以编写如下代码:
import botocore
import boto3
try:
iam = boto3.client('iam')
user = iam.create_user(UserName='fred')
print("Created user: %s" % user)
except iam.exceptions.EntityAlreadyExistsException:
print("User already exists")
except botocore.exceptions.ParamValidationError as e:
print("Parameter validation error: %s" % e)
except botocore.exceptions.ClientError as e:
print("Unexpected error: %s" % e)
不幸的是,目前没有关于这些异常的文档,但是您可以按如下方式获取它们的列表:
import botocore
import boto3
dir(botocore.exceptions)
请注意,您必须同时导入botocore和boto3。如果仅导入botocore,则将发现botocore没有名为的属性exceptions
。这是因为异常是由boto3动态填充到botocore中的。
python AWS boto3 s3 put_对象应该如何处理/测试错误?例如: 可能出现的错误是否记录在某个地方?下面的页面是否是正确的留档页面(似乎是为客户端,而不是),如果是,错误记录在哪里? http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_object 像不存在的bucket这样
我上传到S3使用以下代码: 我无法了解boto内部如何处理分段上传的任何信息。我对同样的事情有几个问题,让我们假设我有2.5 MB的文件: 然后文件将分3部分上传,如1,1和.5 MB? 所有3个部分将并行上传还是按顺序上传? 在java的aws库中,我们有转移管理器,在博托中有什么类似的东西吗? 此代码是否足以用于多段上传?因为我遇到了一些复杂的代码示例 任何帮助都将不胜感激。
TL;DR:将身份验证数据传递给csv文件中名为参数(且未签入)的boto3脚本是否出于任何原因不如明文共享凭据文件(文档中的默认答案)安全? 我想写一个boto3脚本,打算从使用IAM密钥的笔记本电脑上运行。初始化会话的主要公认方法是将API密钥、密钥、区域和(如果适用)会话密钥包含在由标识的共享凭据文件中,或者将密钥和密钥本身作为环境变量(等)我想做的是将这些值从csv或类似文件加载到字典,然
问题内容: 如何处理此调用上的etimedout错误? 有没有办法等待更长的时间?还是再次请求远程文件? 究竟是什么会导致此错误?仅超时? 问题答案: 这是由于在给定时间内未收到您的请求响应(通过 请求模块选项)引起的。 基本上首先要捕获该错误,您需要在上注册一个处理程序,因此不会再抛出未处理的错误:。这里还有一些解释。 在处理程序中,您可以检查错误是否为ETIMEDOUT并应用自己的逻辑:。 如
本文向大家介绍如何处理jQuery AJAX错误?,包括了如何处理jQuery AJAX错误?的使用技巧和注意事项,需要的朋友参考一下 处理jQuery AJAX错误。每当AJAX请求失败时,ajaxError(callback)方法都会附加一个要执行的函数。这是一个Ajax事件。 这是此方法使用的所有参数的描述- callback- 要执行的功能。用于该请求的XMLHttpRequest和设置将