【发布时间】:2019-01-27 10:41:48
【问题描述】:
在尝试实现DNSRequest 时,我还需要进行一些异常处理并注意到一些奇怪的东西。以下代码能够捕获 DNS 请求 timeouts
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 块,并假设会发生 Timeout,则会在 DNSException 上显示消息
捕获 DNSException 异常
永远不会显示。
现在,如果我删除了 DNSException 块,并假设会发生超时,则消息
捕获一般异常
永远不会显示。
但是 Timeout 扩展了 DNSException,而 DNSException 扩展了 Exception。我期望至少一般的期望块应该起作用。
我错过了什么?
【问题讨论】:
标签: python python-3.x amazon-web-services dns aws-lambda