代码更改 - 使用 python2 更改为 python3
code change - using python2 changing to python3
这是 O'Reily Twisted Network 编程基础书籍中的一段示例代码。 "h = HeadlineRetriever()
行引起了问题。错误日志显示 'HeadlineRetriever' 未定义。这是由于py3的变化吗?我该如何解决这个问题?
已尝试:取消缩进 h = HeadlineRetrieveer()
行,但 d.addCallbacks(printData, printError)
行未识别参数。
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(result):
print(result)
reactor.stop()
def printError(failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(printData, printError)
reactor.run()
错误日志:回溯(最近调用最后):
File "C:/Users/jessica/Twisted/3.4asynchronousHeadlineRetriever.py", line 3, in <module>
class HeadlineRetriever(object):
File "C:/Users/jessica/Twisted/3.4asynchronousHeadlineRetriever.py", line 28, in HeadlineRetriever
h = HeadlineRetriever()
NameError: name 'HeadlineRetriever' is not defined
我认为当您定义 h 时和在 class 本身
中开始出现识别错误
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(result):
print(result)
reactor.stop()
def printError(failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(printData, printError)
reactor.run()
这应该有效
你好吗?
也许您缺少 __init__
方法,另外,保持您的代码在左边距处缩进,如果不是,可能会导致您的代码出现一些错误。
尝试添加:
def __init__(self):
pass
看看行不行再更新我
干杯!
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(self, result):
print(result)
reactor.stop()
def printError(self, failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(h.printData, h.printError)
reactor.run()
printError 和 print data 函数需要 self 作为第一个参数并在调用中。
d.adCallbacks(printData, printError)
需要 d.addcallbacks(h.printData, h.printError)
这是 O'Reily Twisted Network 编程基础书籍中的一段示例代码。 "h = HeadlineRetriever()
行引起了问题。错误日志显示 'HeadlineRetriever' 未定义。这是由于py3的变化吗?我该如何解决这个问题?
已尝试:取消缩进 h = HeadlineRetrieveer()
行,但 d.addCallbacks(printData, printError)
行未识别参数。
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(result):
print(result)
reactor.stop()
def printError(failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(printData, printError)
reactor.run()
错误日志:回溯(最近调用最后):
File "C:/Users/jessica/Twisted/3.4asynchronousHeadlineRetriever.py", line 3, in <module>
class HeadlineRetriever(object):
File "C:/Users/jessica/Twisted/3.4asynchronousHeadlineRetriever.py", line 28, in HeadlineRetriever
h = HeadlineRetriever()
NameError: name 'HeadlineRetriever' is not defined
我认为当您定义 h 时和在 class 本身
中开始出现识别错误from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(result):
print(result)
reactor.stop()
def printError(failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(printData, printError)
reactor.run()
这应该有效
你好吗?
也许您缺少 __init__
方法,另外,保持您的代码在左边距处缩进,如果不是,可能会导致您的代码出现一些错误。
尝试添加:
def __init__(self):
pass
看看行不行再更新我
干杯!
from twisted.internet import reactor, defer
class HeadlineRetriever(object):
def processHeadline(self, headline):
if len(headline) > 50:
self.d.errback(
b"The headline ''%s'' is too long!" % (headline,))
else:
self.d.callback(headline)
def _toHTML(self, result):
return "<h1>%s</h1>" % (result,)
def getHeadline(self, input):
self.d = defer.Deferred()
reactor.callLater(1, self.processHeadline, input)
self.d.addCallback(self._toHTML)
return self.d
def printData(self, result):
print(result)
reactor.stop()
def printError(self, failure):
print(failure)
reactor.stop()
h = HeadlineRetriever()
d = h.getHeadline("Breaking News: Twisted Takes Us to the Moon!")
d.addCallbacks(h.printData, h.printError)
reactor.run()
printError 和 print data 函数需要 self 作为第一个参数并在调用中。
d.adCallbacks(printData, printError)
需要 d.addcallbacks(h.printData, h.printError)