Sar*_*rit 8 python botocore boto3
我正在使用AWS Cognito制作OAuth服务器。我现在正在创建异常处理程序以防使用不存在,但requests打算获得一个
ipdb> pk
'David'
ipdb> res = self.cognito_client.admin_get_user(
UserPoolId=settings.AWS_USER_POOL_ID,
Username=pk
)
*** botocore.errorfactory.UserNotFoundException: An error occurred (UserNotFoundException) when calling the AdminGetUser operation: User does not exist.
Traceback (most recent call last):
File "/Users/sarit/.pyenv/versions/futuready-titan/lib/python3.8/site-packages/botocore/client.py", line 316, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/Users/sarit/.pyenv/versions/futuready-titan/lib/python3.8/site-packages/botocore/client.py", line 626, in _make_api_call
raise error_class(parsed_response, operation_name)
Run Code Online (Sandbox Code Playgroud)
boto3==1.12.15 # via -r el.in
botocore==1.15.15 # via boto3, s3transfer
django==3.0.3
python3.8.1
Run Code Online (Sandbox Code Playgroud)
我已经检查过botocore 源代码 UserNotFoundException
问题:
我怎么能具体说catch这个exception?
Max*_*lov 36
当异常创建时,botocore.error_factory无法直接导入它。您应该使用生成的类来处理异常,而不是直接导入。
文档中为每个操作提供了可能的异常列表。例如,对于CognitoIdentityProvider.Client.admin_get_user,可能的例外情况有:
CognitoIdentityProvider.Client.exceptions.ResourceNotFoundException
CognitoIdentityProvider.Client.exceptions.InvalidParameterException
CognitoIdentityProvider.Client.exceptions.TooManyRequestsException
CognitoIdentityProvider.Client.exceptions.NotAuthorizedException
CognitoIdentityProvider.Client.exceptions.UserNotFoundException
CognitoIdentityProvider.Client.exceptions.InternalErrorException
Run Code Online (Sandbox Code Playgroud)
有一个示例说明如何获取客户端的示例列表以及如何处理它(当然异常列表取决于操作):
CognitoIdentityProvider.Client.exceptions.ResourceNotFoundException
CognitoIdentityProvider.Client.exceptions.InvalidParameterException
CognitoIdentityProvider.Client.exceptions.TooManyRequestsException
CognitoIdentityProvider.Client.exceptions.NotAuthorizedException
CognitoIdentityProvider.Client.exceptions.UserNotFoundException
CognitoIdentityProvider.Client.exceptions.InternalErrorException
Run Code Online (Sandbox Code Playgroud)
此外,您可能会捕获较少类型的内容botocore.exceptions.ClientError而不是特定的内容:
import boto3
eks = boto3.client('eks')
print(dir(eks.exceptions))
# ['BadRequestException',
# 'ClientError',
# 'ClientException',
# 'InvalidParameterException',
# 'InvalidRequestException',
# 'NotFoundException',
# 'ResourceInUseException',
# 'ResourceLimitExceededException',
# 'ResourceNotFoundException',
# 'ServerException',
# 'ServiceUnavailableException',
# 'UnsupportedAvailabilityZoneException', ...]
try:
response = eks.list_nodegroups(clusterName='my-cluster')
except eks.exceptions.ResourceNotFoundException as e:
# do something with e
print("handled: " + str(e))
cognito_idp = boto3.client('cognito-idp')
print(dir(cognito_idp.exceptions))
# [ 'ClientError',
# 'ConcurrentModificationException',
# 'DeveloperUserAlreadyRegisteredException',
# 'ExternalServiceException',
# 'InternalErrorException',
# 'InvalidIdentityPoolConfigurationException',
# 'InvalidParameterException',
# 'LimitExceededException',
# 'NotAuthorizedException',
# 'ResourceConflictException',
# 'ResourceNotFoundException',
# 'TooManyRequestsException', ... ]
try:
response = cognito_idp.admin_get_user(
UserPoolId='pool_id',
Username='username'
)
except cognito_idp.exceptions.UserNotFoundException as e:
# do something with e
print("handled: " + str(e))
Run Code Online (Sandbox Code Playgroud)
有两种方法,如果异常暴露在客户端上,您可以直接捕获异常,或者从 botocore.exceptions 导入并改用它。
选项1:
try:
res = self.cognito_client.admin_get_user(
UserPoolId=settings.AWS_USER_POOL_ID,
Username=pk
)
except self.cognito_client.exceptions.UserNotFoundException as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
选项 2:
from botocore.exceptions import UserNotFoundException
try:
res = self.cognito_client.admin_get_user(
UserPoolId=settings.AWS_USER_POOL_ID,
Username=pk
)
except UserNotFoundException as e:
print(e)
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅 botos 错误处理文档。
这当然不理想,但我可以通过以下方式捕获它:
from botocore.exceptions import ClientError
try:
func_that_interacts_with_cognito()
except ClientError:
# This happens when the user is not found.
print("It happened again ...")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2767 次 |
| 最近记录: |