我编写了如下TCP处理程序(改编自:https://docs.python.org/2/library/socketserver.html#socketserver-tcpserver-example):
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import SocketServer
from MyModule import myFunction
class MyHandler(SocketServer.StreamRequestHandler):
def handle(self):
self.data = self.rfile.readline().strip()
result = myFunction(self.data)
self.wfile.write(result)
if __name__ == "__main__":
HOST, PORT = myhost, myport
server = SocketServer.TCPServer((HOST, PORT), MyHandler)
server.serve_forever()
它工作得很好,现在我尝试添加一个记录器:
^{pr2}$当我运行它时,我得到以下错误:
TypeError: __init__() takes exactly 1 argument (4 given)
我不明白给出的4个论点是什么。 除此之外,代码还有什么问题吗?在
编辑:完整回溯:
Exception happened during processing of request from ('MyIP', 54028)
Traceback (most recent call last):
File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
self.RequestHandlerClass(request, client_address, self)
TypeError: __init__() takes exactly 1 argument (4 given)
MyHandler
是SocketServer.StreamRequestHandler
的子类,它是{回溯错误消息显示^{} method
^{pr2}$被称为。
self.RequestHandlerClass
是MyHandler
。因此,MyHandler.__init__
应该有调用签名而不是
调用
self.RequestHandlerClass(request, client_address, self)
时,Python调用 以self
作为第一个参数的RequestHandlerClass
方法。换句话说,RequestHandlerClass(self, request, client_address, self)
被调用。self, request, client_address, self
是传递给MyHandler
的四个参数。 错误消息正在抱怨
MyHandler.__init__
被定义为只需要1个参数,但却被传递了4个参数。在相关问题 更多 >
编程相关推荐