Eroare attributeerror __exit__ în Python cum să se stabilească

Sergey Gornostaev. soclu import, filetare, socketserver

# Creați un handler posturi de clasă
class ThreadedTCPRequestHandler (socketserver.BaseRequestHandler):

mâner def (auto):
date = str (self.request.recv (1024), 'utf-8')
cur_thread = threading.current_thread ()
răspuns = octeți ( "<>. <>“.format (cur_thread.name, date), 'utf-8')
self.request.sendall (răspuns)

class ThreadedTCPServer (socketserver.ThreadingMixIn, socketserver.TCPServer):
„“ „Serverul de streaming. Este suficient pentru a crea o clasă fără curaj“ „“
trece

# Creați un simplu „client“
client def (ip, port, messange):
cu socket.socket (socket.AF_INET, socket.SOCK_STREAM) ca ciorap:
sock.connect ((ip, port))
sock.sendall (bytes (messange, 'utf-8'))
răspuns = str (sock.recv (1024), 'utf-8')
imprimare ( „Serverul a răspuns: <>“.format (răspuns))

dacă __name__ == '__main__':
Port # 0 selectează automat un port neutilizat
HOST, PORT = "localhost", 0

Server = ThreadedTCPServer ((HOST, PORT), ThreadedTCPRequestHandler)
# Cu server:
ip, port = server.server_address

Imi pare rau ca am comentat cu, și cu o poate dori asta rula?

Vladimir. TCPServer sprijină protocolul de management al contextului incepand cu Python 3.6

Vă mulțumesc, ar trebui să încercați!

și ceea ce a făcut să-l faci cu?

Pavel Denisov: Sincer, îmi place doar „zahăr sintactică“)

Vladimir. și necugetat-l folosesc? Ei bine, aici, sugerează că există un 3.6 la TCPServer. Deci, e un lucru, dacă l-ai citit pe docuri sau în exemplele de văzut, iar celălalt - a intrat la întâmplare.