J'ai un serveur de transfert de fichiers simple qui utilise socket, Il a une écoute infinie de clients boucle dans la fonction Main(), donc je l'ai entouré de Try/Except avec KeyboardInterrupt donc je voudrais être en mesure de bien fermer toutes les prises et les connexions lorsque CTRL + C-tion surEssayer/Sauf attraper UnboundLocalError sur KeyboardInterrupt
def Main():
try:
#various variable initations
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((host,port))
print 'Socket bound to host - {0} and port {1}'.format(host,port)
sock.listen(5)
print 'Waiting for connections...'
while True:
conn, addr = sock.accept()
print 'Client IP:',str(addr)
#getting data from client and making the server do the appropriate functions
conn.close()
sock.close()
except(KeyboardInterrupt): # redundancy to make sure that a keyboard interrupt to close the program also closes the sockets and connections
conn.close()
sock.close()
print 'Manual Close'
sys.exit()
maintenant, lorsqu'un client se connecte et fait tout et je la ferme via le clavier d'interruption, il fonctionne très bien, je l'impression du « Fermer Manuel »
Mais quand je ferme par clavierinterruption avant qu'un client se connecte il me donne cette erreur: UnboundLocalError: local variable 'conn' referenced before assignment
Je comprends les conn
ne sont pas affectés si un client ne se connecte pas, mais je pense que toute erreur sous except
ignorés
Il est possible que 'sock' soit valide, mais que' conn' ne soit pas; ce code laisserait 'sock' ouvert dans ce cas. Pas que ça compte vraiment, puisque quitter le programme ferme toutes les sockets de toute façon. – jasonharper
@jasonharper Je suppose que vous pouvez envelopper à la fois 'conn' et' sock' dans un 'try/except' individuel et je suis à peu près certain que cela fonctionnerait mais je ne sais pas si c'est la meilleure pratique pour le faire – Muffinator