Я просто подобрал python как мой язык для написания сценариев, и я пытаюсь понять, как правильно обрабатывать ошибки с помощью 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 завершается успешно, я получаю аккуратный объект, который содержит код состояния HTTP вызова API и данные вновь созданного пользователя.
Пример:
{'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 ("Произошла ошибка (EntityAlreadyExists) при вызове операции CreateUser: пользователь с опущенным именем уже существует. ',)
Это (AFAIK) делает обработку ошибок очень сложной, потому что я не могу просто включить полученный код статуса http (409 для пользователя уже существует в соответствии с документами AWS API для IAM). Это заставляет меня думать, что я должен делать что-то не так. Оптимальным способом было бы boto3 никогда не генерировать исключения, но juts всегда возвращают объект, который отражает способ вызова API.
Может кто-нибудь просветить меня по этому вопросу или указать мне в правильном направлении?
Спасибо большое!