La manipulation d'une erreur de dépassement de délai en python sockets
Je suis à essayer de comprendre comment utiliser l'essayer et à l'exception d'une poignée de délai d'attente du socket.
from socket import *
def main():
client_socket = socket(AF_INET,SOCK_DGRAM)
client_socket.settimeout(1)
server_host = 'localhost'
server_port = 1234
while(True):
client_socket.sendto('Message',(server_host,server_port))
try:
reply, server_address_info = client_socket.recvfrom(1024)
print reply
except socket.Timeouterror:
#more code
La façon dont j'ai ajouté le support du module de tout importer, mais comment puis-je gérer les exceptions dans les docs il est dit que vous pouvez utiliser socket.timeouterror, mais qui ne fonctionne pas pour moi. Aussi, comment pourrais-je écrire l'essayer bloc d'exception si je n'ai import socket
? Quelqu'un peut aussi expliquer la différence dans les importations.
Vous devez vous connecter pour publier un commentaire.
ajoute tous les noms sans les traits de soulignement (ou seulement les noms définis dans les modules
__all__
attribut) dansfoo
dans votre module.Dans le code ci-dessus avec
from socket import *
vous voulez juste pour attrapertimeout
comme vous l'avez tirétimeout
dans votre espace de noms courant.from socket import *
tire dans les définitions de tout à l'intérieur desocket
mais ne pas ajouter desocket
lui-même.Beaucoup de gens considèrent
import *
problématique et essayer de l'éviter. C'est parce que les communes, les noms de variables en 2 ou plusieurs modules qui sont importés dans cette façon de neutraliser l'un l'autre.Par exemple, considérer trois fichiers python:
Si vous exécutez
yourcode.py
vous verrez la sortie de "c'est b de la fonction foo".Pour cette raison, je vous suggère soit de l'importation du module et de l'utiliser ou de l'importation des noms spécifiques du module:
Par exemple, votre code devrait ressembler à ceci de manière explicite les importations:
Juste un tout petit peu plus à taper mais tout est explicite et il est assez évident pour le lecteur où tout vient de.
socket.timeout
au lieu desocket.Timeouterror
: docs.python.org/2/library/socket.html#socket.timeoutJ'ai eu assez de succès juste catchig
socket.timeout
etsocket.error
; bien que socket.l'erreur peut être provoquée par de nombreuses raisons. Être prudent.Lorsque vous ne
from socket import *
python est le chargement d'unsocket
module de l'espace de noms courant. Ainsi, vous pouvez utiliser le module de membres que s'ils sont définis à l'intérieur de votre module python.Lorsque vous ne
import socket
, un module est chargé dans un autre espace de noms. Lorsque vous accédez à ses membres, vous devez préfixer avec un nom de module. Par exemple, si vous voulez faire référence à unsocket
de la classe, vous en aurez besoin pour écrireclient_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
.Comme pour le problème de délai d'attente - tout ce que vous devez faire est de changer
except socket.Timeouterror:
àexcept timeout:
, depuistimeout
classe est définie à l'intérieur d'socket
module et que vous avez importé à tous ses membres de votre espace de noms.Voici une solution que j'utilise dans un de mes projet.
network_utils.telnet
Tests