Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 处理简单DNS扭曲客户端上的错误_Python_Asynchronous_Dns_Twisted - Fatal编程技术网

Python 处理简单DNS扭曲客户端上的错误

Python 处理简单DNS扭曲客户端上的错误,python,asynchronous,dns,twisted,Python,Asynchronous,Dns,Twisted,如果所有域都存在,则以下DNS异步客户端工作正常 但是,如果域名不存在,则会引发DNSNameError异常,并且不会被我的“try except”块捕获。然后,其他域将无法解析 我查看了和的文档,但没有找到如何处理此错误,因为我使用了 问题:如何在查询()中捕获DNSNameError异常 来自itertools导入周期的 从pprint导入pprint 从twisted.names导入客户端,dns 从twisted.internet.task导入 从twisted.internet导入延迟

如果所有域都存在,则以下DNS异步客户端工作正常

但是,如果域名不存在,则会引发DNSNameError异常,并且不会被我的“try except”块捕获。然后,其他域将无法解析

我查看了和的文档,但没有找到如何处理此错误,因为我使用了

问题:如何在查询()中捕获DNSNameError异常

来自itertools导入周期的

从pprint导入pprint
从twisted.names导入客户端,dns
从twisted.internet.task导入
从twisted.internet导入延迟,反应器
def查询(反应器、服务器、名称):
解析程序=客户端.resolver(
resolv=“/dev/null”,服务器=[(服务器,53)],反应器=反应器)
尝试:
返回解析程序。查找地址(名称)
除:
打印“错误查询”
return defer.returnValue(([]、[]、[]))
@defer.inlineCallbacks
def干管(反应器,名称):
服务器=[“4.2.2.1”、“8.8.8.8”]
下一个服务器=循环(服务器)。下一个
结果=[]
对于名称中的n:
尝试:
results.append(查询(reactor,next_server(),n))
除:
打印“错误附加”
尝试:
结果=产生延迟。收集结果(结果)
打印“成功”
除:
打印“错误结果”
最后:
打印“关闭”
反应堆停止()
pprint(邮政编码(姓名、结果))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main(reactor,('google.com','notexist.www','google.fr',)
反应堆运行()
结果:

$ipython twisteddns.py 
ipython twisteddns.py 
Error result
Shutting down
[('google.com', <Deferred at 0xad862ac>),
 ('notexist.www',
  <Deferred at 0xad8666c current result: <twisted.python.failure.Failure <class 'twisted.names.error.DNSNameError'>>>),
 ('google.fr', <Deferred at 0xad869ac>)]
Unhandled error in Deferred:
Unhandled Error
Traceback (most recent call last):
Failure: twisted.names.error.DNSNameError: <twisted.names.dns.Message instance at 0xad86a6c>
$ipython twisteddns.py
ipython twisteddns.py
误差结果
关闭
[('google.com',),
('notexist.www',
),
('google.fr',)]
延迟中未处理的错误:
未处理错误
回溯(最近一次呼叫最后一次):
失败:twisted.names.error.dnsname错误:

首先,切勿在用
内联回调修饰的函数之外使用
returnValue
。它没有任何意义,它会产生令人惊讶的结果,它会触发警告告诉你不要这样做,而且它可能会比Twisted的未来版本中已经损坏的更糟糕

您在
query
中查找的函数是
defer.success
。例如:

...
except:
    print "error query"
    return defer.succeed(([],[],[]))
但是,由于您没有在
查询
上使用
内联回调
,因此应该将其添加为errback

d = resolver.lookupAddress(name)
def queryFailed(reason):
    log.err(reason, "Lookup of %s failed" % (name,))
    return ([], [], [])
d.addErrback(queryFailed)
return d