Я разрабатываю приложение django, которое общается с несколькими веб-службами Amazon.
До сих пор у меня возникли проблемы с устранением исключений, вызванных клиентом boto3. То, что я делаю, кажется излишне утомительным:
Пример:
client = boto3.client('sns')
client.create_platform_endpoint(PlatformApplicationArn=SNS_APP_ARN, Token=token)
это может вызвать botocore.errorfactory.InvalidParameterException
, если, например, токен плох.
client.get_endpoint_attributes(EndpointArn=endpoint_arn)
может вызвать botocore.errorfactory.NotFoundException
.
Во-первых, я не могу найти эти ошибки в любом месте кода, поэтому они, вероятно, сгенерированы где-то. Итог: я не могу импортировать его и поймать как обычно.
Во-вторых, я нашел один способ поймать ошибку здесь, используя:
try:
# boto3 stuff
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == 'NotFound':
# handle exception
else:
raise e
Но мне нужно удалить часть Exception
имени ошибки. Кажется очень случайным, и я не знаю, удалю ли я Error
в botocore.exceptions.ParamValidationError
, если захочу его поймать. Поэтому трудно обобщить.
Другой способ поймать ошибку - использовать клиентский объект boto3, который я получил:
try:
# boto3 stuff
except client.exceptions.NotFoundException as e:
# handle exception
Это кажется самым чистым способом до сих пор. Но у меня не всегда есть клиентский объект boto3, где я хочу поймать ошибку. Кроме того, я все еще только пытаюсь разобраться, поэтому он в основном угадывает работу.
Кто-нибудь знает, как должны обрабатываться ошибки boto3?
Или можете указать мне на какую-то согласованную документацию, в которой упоминаются ошибки выше? Благодаря