【问题标题】:How can I import the boto3 ssm ParameterNotFound exception?如何导入 boto3 ssm ParameterNotFound 异常?
【发布时间】:2017-09-05 20:47:28
【问题描述】:

我想import exception 出现在 get_parameter 中找不到 boto3 ssm 参数时。我正在尝试向moto 库添加一些额外的ssm 功能,但此时我很难过。

>>> import boto3
>>> ssm = boto3.client('ssm')
>>> try:
        ssm.get_parameter(Name='not_found')
    except Exception as e:
        print(type(e))
<class 'botocore.errorfactory.ParameterNotFound'>
>>> from botocore.errorfactory import ParameterNotFound
ImportError: cannot import name 'ParameterNotFound'
>>> import botocore.errorfactory.ParameterNotFound
ModuleNotFoundError: No module named 'botocore.errorfactory.ParameterNotFound'; 'botocore.errorfactory' is not a package

但是,Exception 无法导入,并且在 botocore 代码中似乎不存在。如何导入此异常?

【问题讨论】:

    标签: python amazon-web-services boto3 botocore moto


    【解决方案1】:
    mc = boto3.client('ssm')
    try:
      ...
    except mc.exceptions.ParameterNotFound:
      ...
    

    【讨论】:

    • 当我尝试这个并到达except 行时,它会生成一个异常声明exceptions must derive from the base class 所以我怀疑这是否真的有效
    【解决方案2】:

    来自Botocore Error Handling

    import boto3
    from botocore.exceptions import ClientError
    
    ssm = boto3.client('ssm')
    try:
        ssm.get_parameter(Name='not_found')
    except ClientError as e:
        print(e.response['Error']['Code'])
    

    【讨论】:

    • 从代码的角度来看,这并不难理解。从设计角度难以理解的是,您不能直接从 boto3 中的调用堆栈名称导入或命名错误。 import botocore.errorfactory.ResourceNotFoundExceptionexcept botocore.errorfactory.ResourceNotFoundException 都不起作用。但两者都是在收到上述错误后立即想要尝试的。令人费解。
    • 有关 ClientError 响应结构的更多信息,另请参阅此答案:stackoverflow.com/a/33663484
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 2021-03-25
    • 2020-10-06
    相关资源
    最近更新 更多