[英]TypeError: __init__() missing 3 required positional arguments
我正在建立一個使用http.server
處理HTTP GET請求的類,這是我到目前為止編寫的內容:
class webServerHandler(BaseHTTPRequestHandler):
__HOST = "localhost"
__PORT = 8080
# Custom GET response
def do_GET(self):
page_content = self.htmlHandler()
self.wfile.write(page_content) # Send web page
# HTML code
def htmlHandler(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
msg = '''
<html><head><title>Test</title></head>
<body><h1><center>Test</center></h1></body>
</html>
'''
return bytes(msg, "UTF-8") # UTF-8 Format
# Run the server
def serverStart(self):
# init HTTP Daemon
http_daemon = HTTPServer((self.__HOST, self.__PORT), webServerHandler)
http_daemon.serve_forever()
print("Info: Server started")
我用它執行:
server = webServerHandler()
server.serverStart()
當我嘗試執行它時,它給了我這個錯誤:
TypeError: __init__() missing 3 required positional arguments: 'request', 'client_address', and 'server'
我做錯了什么?
發生此錯誤是因為BaseHTTPRequestHandler
具有3個必需參數 ,因此,擴展BaseHTTPRequestHandler
並且不覆蓋構造函數的webServerHandler
類也具有這些必需參數。
當您需要使用request
, client_address
和server
參數調用webServerHandler
時,將不帶任何參數的情況下調用webServerHandler()
。
讓我們遵循MRO:
In [351]: http.server.BaseHTTPRequestHandler.__mro__
Out[351]:
(http.server.BaseHTTPRequestHandler,
socketserver.StreamRequestHandler,
socketserver.BaseRequestHandler,
object)
__init__
是在socketserver.BaseRequestHandler
定義的:
def __init__(self, request, client_address, server):
self.request = request
self.client_address = client_address
self.server = server
self.setup()
try:
self.handle()
finally:
self.finish()
如您所見,您需要提供所需的3個位置參數( request
, client_address
和server
)來實例化實例,如異常中所述。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.