2011-11-25 9 views
5

Capisco la sintassi di base try:except:finally: per la gestione degli errori dei pitoni. Quello che non capisco è come trovare i nomi di errore corretti per rendere il codice leggibile.Informazioni sui codici di errore in Python e utilizzo di nomi di errori significativi

Ad esempio:

try: 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((HOST, PORT)) 
    s.settimeout(60)    
    char = s.recv(1) 

except socket.timeout: 
    pass 

quindi se presa solleva un timeout, l'errore viene catturato. Che ne dici se sto cercando una connessione rifiutata. So che il numero di errore è 10061. Dove nella documentazione cerco di trovare un nome completo di significato come timeout. Ci sarebbe un posto simile per cercare altri moduli Python? So che questa è una domanda per principianti, ma ho messo in errore la gestione del mio codice per un po 'di tempo, senza sapere dove cercare le descrizioni e i nomi degli errori.

EDIT:

Grazie per tutte le vostre risposte.

sarebbe

except socket.error, exception: 
    if exception.errno == ETIMEDOUT: 
     pass 

ottenere lo stesso risultato di

except socket.timeout: 
    pass 

risposta

5

Per ottenere ciò che si vuole, si dovrà afferrare l'eccezione sollevata, estrarre il codice di errore memorizzato in, e fare alcune comparazioni if contro errno codes:

try: 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    s.connect((HOST, PORT)) 
    s.settimeout(60)    
    char = s.recv(1) 
except socket.error, exception: 
    if exception.errno == errno.ECONNREFUSED: 
     # this is a connection refused 
    # or in a more pythonic way to handle many errors: 
    { 
     errno.ECONNREFUSED : manage_connection_refused, 
     errno.EHOSTDOWN : manage_host_down, 
     #all the errors you want to catch 
    }.get(exception.errno, default_behaviour)() 
except socket.timeout: 
    pass 

con:

def manage_connection_refused(): 
    print "Connection refused" 

def manage_host_down(): 
    print "Host down" 

def default_behaviour(): 
    print "error" 
2

Si otterrà un errore con un errno, che è descritto nella documentazione errno. 10061 è valido solo per WinSock.

+0

ok, quindi come scrivo per rilevare un'eccezione errno.ECONNREFUSED – Richard

+1

si cattura socket.error e quindi controllare il codice. – unbeli

0

In base a socket, i valori di socket.error sono definiti nel modulo errno.

Problemi correlati