Поймать определенные исключения в Python - PullRequest
2 голосов
/ 08 апреля 2019

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

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

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 Ответ

6 голосов
/ 08 апреля 2019

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

from botocore.exceptions import ProfileNotFound

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...