То же исключение для другого варианта использования - boto3 - PullRequest
0 голосов
/ 08 ноября 2018

Используя boto3 IAM, я пытаюсь отключить устройство MFA, подключенное к указанному пользователю. Я столкнулся с несколькими исключениями, с которыми мне нужно разобраться.

Я передаю имя пользователя во время выполнения.

1 - передача уже отключенного имени пользователя во время выполнения

python mfa.py John 

botocore.errorfactory.NoSuchEntityException: An error occurred (NoSuchEntity) when calling the DeactivateMFADevice operation: MFA Device invalid for user.

2. Передано неверное имя пользователя

python mfa.py John.d  

botocore.errorfactory.NoSuchEntityException: An error occurred (NoSuchEntity) when calling the DeactivateMFADevice operation: The user with name John.d cannot be found.

Как обрабатывать обе ошибки, так как оба исключения являются частью

botocore.errorfactory.NoSuchEntityException

Как мне справиться с обоими в разных исключениях, чтобы я мог

print («MFA уже отключен»)

ИЛИ

print («Неверное имя пользователя»)

1 Ответ

0 голосов
/ 10 ноября 2018

Этого можно достичь, просматривая словарь ответов об исключениях.

Попытка:

 except client.exceptions.NoSuchEntityException as e:
      print(dir(e))

Вы можете найти набор значений, которые можно передать для обработки исключения:

['MSG_TEMPLATE', ' причина ', ' класс ', ' context ', ' delattr ', ' dict ', ' dir ', ' doc ', ' eq ', ' format ', ' ge ', ' getattribute ', ' gt ', ' hash ', ' init ', ' init_subclass ', ' le ', ' lt ', ' module ', ' ne ', ' new ', ' Reduce ', ' redu_ex ', ' repr ', ' setattr ', ' setstate ', ' sizeof ', ' str ', ' subclasshook ', ' suppress_context ', ' traceback ', ' weakref ', '_get_retry_info', 'args', 'имя_операции', 'response', 'with_traceback']

Вышеупомянутый случай может быть обработан следующим способом:

 except client.exceptions.NoSuchEntityException as e:

   if e.response['Error']['Message'] == 'MFA Device invalid for user.':

       print('#something')

   elif e.response['Error']['Message'] == 'The user with name {} cannot be found.'.format(UserName):

       print('#something')

Следовательно, обработано исключение.

...