Перехватывать определенные исключения в Python

Мой сценарий работает нормально, если я перехватываю все исключения ошибки, с которой столкнулся.

Однако, если я попытаюсь ограничить его только одним исключением, я получаю следующую ошибку:

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.

Что я делаю неправильно? Как я могу исключить эту ошибку конкретно?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 683
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно импортировать исключения из boto.

from botocore.exceptions import ProfileNotFound

исключения не обязательно будут импортированы по умолчанию.

Спасибо, я пробовал это. Я добавил из botocore.exceptions import ProfileNotFound и в своем коде делаю: except botocore.ProfileNotFound: . Но ошибка, которую я все еще получаю, это except botocore.ProfileNotFound: NameError: name 'botocore' is not defined. Любые другие предложения?

bluethundr 08.04.2019 21:13

Вы уже импортируете только исключение из botocore, а не все botocore, поэтому в пространстве имен не существует атрибута, вызываемого из него. Либо импортируйте все botocore, либо просто вызовите исключение по имени. except botocore.ProfileNotFound -> except ProfileNotFound

G. Anderson 08.04.2019 21:15

Спасибо! Изменение исключения на просто: except ProfileNotFound: сработало!

bluethundr 08.04.2019 21:29

Другие вопросы по теме