#python #boto3
#python #boto3
Вопрос:
Мой скрипт работает нормально, если я улавливаю все исключения из ошибки, с которой я столкнулся.
Однако, если я попытаюсь ограничить его только одним исключением, это ошибка, которую я получаю:
except botocore.ProfileNotFound:
NameError: name 'botocore' is not defined
Это мой код:
import boto3
while True:
try:
aws_account = input("Enter the name of the AWS account you'll be working in: ")
session = boto3.Session(profile_name=aws_account)
resource = session.resource('iam')
client = session.client('iam')
kms_client = session.client('kms')
secrets_client = session.client('secretsmanager')
break
except botocore.ProfileNotFound:
print('AWS account does not exist. Try again!')
Если я изменю исключение на:
except:
print('AWS account does not exist. Try again!')
Программа работает.
Это полная ошибка, которую я пытаюсь исключить:
raise ProfileNotFound(profile=profile_name)
botocore.exceptions.ProfileNotFound: The config profile (jf-ruby-dev) could not be found
Если я распечатаю точное исключение с:
except Exception as e then use print(type(e))
Это то, что я получаю:
The error type is: <class 'botocore.exceptions.ProfileNotFound'>
.
И все же, если я сделаю:
from botocore.exceptions import ProfileNotFound
в моем коде и после except botocore.exceptions.ProfileNotFound:
этого я все еще получаю эту ошибку:
except botocore.exceptions.ProfileNotFound:
.
NameError: name 'botocore' is not defined
Что я делаю не так? Как я могу исключить эту ошибку конкретно?
Ответ №1:
Вам необходимо импортировать исключения из boto.
from botocore.exceptions import ProfileNotFound
исключения не обязательно будут импортированы по умолчанию.
Комментарии:
1. Спасибо, я пробовал это. Я добавил из
botocore.exceptions import ProfileNotFound
и в свой код, который я делаю:except botocore.ProfileNotFound:
. Но ошибка, которую я все еще получаю, таковаexcept botocore.ProfileNotFound: NameError: name 'botocore' is not defined
. Любые другие предложения?2. Вы уже импортируете только исключение из
botocore
, а не всеbotocore
, поэтому оно не существует в пространстве имен, чтобы из него вызывался атрибут. Либо импортируйте все botocore, либо просто вызовите исключение по имени.except botocore.ProfileNotFound
->except ProfileNotFound
3. Спасибо! Изменение исключения на просто:
except ProfileNotFound:
это то, что сработало!