【发布时间】:2020-12-17 12:13:37
【问题描述】:
我有一个 deferredList 会在第一次回调时触发,但我实际上是在玩回调链的性质,所以如果没有触发任何回调,则会触发 errbacks。
问题是,一旦我为 errbacks 添加处理程序,addErrback 和我创建的 Failure,触发器和 stdout 仍然对我大喊:
Unhandled error in Deferred:
Traceback (most recent call last):
Failure: __main__.notFound: Match not found!
最后的 errback 执行以下操作:
def emptyQuery(error, name):
errorType = error.trap(notFound)
if errorType == notFound:
print("[-] Item not found in given sources: {name}".format(name=name))
print("->", errorType)
return
因此,
[(False, <twisted.python.failure.Failure __main__.notFound: Match not found!>)]
[-] Item not found for current sources: GIA-S12
-> <class '__main__.notFound'>
Unhandled error in Deferred:
Traceback (most recent call last):
Failure: __main__.notFound: Match not found!
我怎样才能摆脱那个“未处理的东西”?我陷入了错误,我不知道为什么它会这样大喊大叫。
它实际上是由我实现的这个for循环触发的:
for item in items:
name, price = item
itemQuery_deferreds = []
for urlObject in URLS:
urlFire = poolsem.acquire().addCallback(initQuery, urlObject.url, name, googleClient)
itemQuery_deferreds.append(urlFire)
itemQuery = DeferredList(itemQuery_deferreds, fireOnOneCallback=True)
itemQuery.addCallback(parseData)
itemQuery.addErrback(emptyQuery, name)
当然,在去 errback 处理程序 emptyQuery 之前,我必须期待回调首先被调用:
def parseData(data):
print(data)
for code, status in data:
if not code:
return status
else:
store = status
另外,每个我在所有代码中的延迟都包含一个 errback 处理程序:
def onError(error):
return error
注意:我发现这很难调试,如果您需要更多信息,请尽管询问。
【问题讨论】:
标签: python-3.x callback twisted deferred