在尝试实现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块应该起作用。
我想念什么?
答案 0 :(得分:0)
在最后一个方框中,尝试使print
行位于result[dnsIpAddress] = "FAILURE"
之前
我的猜测是要么代码多于此处显示的内容,要么是print语句导致不同异常之前的那一行。