我通过尝试构建RSS agregator来学习Twisted。当我尝试使用Web代理构建请求时,我告诉我没有提供url参数作为字节:
[Failure instance: Traceback (failure with no frames): <class 'twisted.web._newclient.RequestGenerationFailed'>: [<twisted.python.failure.Failure builtins.TypeError: sequence item 0: expected a bytes-like object, str found>]
但我想我做到了:
from twisted.internet import reactor
from twisted.web.client import Agent
def request_sent(response):
print ('I got something!')
def request_failed(reason):
print (reason)
def feed_loader_main():
"""
Starts and manage the reactor
"""
agent = Agent(reactor)
d = agent.request(
'GET',
'http://www.example.com'.encode('utf8') ##### <- HERE
)
d.addCallback(request_sent)
d.addErrback(request_failed)
print ('Firing reactor!')
reactor.run()
if __name__ == '__main__':
feed_loader_main()
这是扭曲的黑魔法还是我的编码不好?
答案 0 :(得分:2)
该异常实际上并没有说您没有提供URL作为字节。它只是在某个地方说它需要字节并改为使用str(unicode)。
我猜你是在Python 3上,因为我可以用Python 3上的代码复制你的异常而不是Python 2.我不确定你使用的是什么版本的Twisted但是我怀疑这不是'特别是扭曲版本。不过,在未来的问题中指定Python和Twisted的版本是个好主意。
您传递给request
的另一个值是"GET"
,而在Python 3上,这是一个str(unicode)。如果你对它进行编码(或者只是使用b"..."
使其成为字节文字),那么异常就会消失。