AWS Lambda函数中的异常处理

时间:2018-08-21 09:14:09

标签: python python-3.x amazon-web-services dns aws-lambda

在尝试实现DNSRequest的同时,我还需要进行一些异常处理并注意到一些奇怪的地方。以下代码能够捕获DNS请求超时

def lambda_handler(event, context):

    hostname = "google.de"
    dnsIpAddresses = event['dnsIpAddresses']
    dnsResolver = dns.resolver.Resolver()
    dnsResolver.lifetime = 1.0
    result = {}

    for dnsIpAddress in dnsIpAddresses:
        dnsResolver.nameservers = [dnsIpAddress]

        try:
           myAnswers = dnsResolver.query(hostname, "A")
           print(myAnswers)
           result[dnsIpAddress] = "SUCCESS"
        except dns.resolver.Timeout:
           print("caught Timeout exception")
           result[dnsIpAddress] = "FAILURE"
        except dns.exception.DNSException:
           print("caught DNSException exception")
           result[dnsIpAddress] = "FAILURE"
        except:
           result[dnsIpAddress] = "FAILURE"
           print("caught general exception")

    return result

现在,如果我删除了Timeout块,并假设发生超时,则在DNSException消息

  

捕获到DNSException异常

将永远不会显示。

现在,如果我删除了DNSException块,并假设发生超时,则消息

  

发现了一般例外

将永远不会显示。

但是超时扩展了DNSException,而DNSException扩展了Exception。我期望至少一般的Expect块应该起作用。

我想念什么?

1 个答案:

答案 0 :(得分:0)

在最后一个方框中,尝试使print行位于result[dnsIpAddress] = "FAILURE"之前 我的猜测是要么代码多于此处显示的内容,要么是print语句导致不同异常之前的那一行。