web-dev-qa-db-fra.com

Python manipulant des codes d'erreur spécifiques?

Hey, je me demande comment gérer des codes d'erreur spécifiques. Par exemple, [Errno 111] Connection refused

Je veux attraper cette erreur spécifique dans le module de socket et imprimer quelque chose.

22
AustinM

Si vous voulez obtenir le code d'erreur, cela semble faire l'affaire.

import errno

try:
    socket_connection()
except socket.error as error:
    if error.errno == errno.ECONNREFUSED:
        print(os.strerror(error.errno))
    else:
        raise

Vous pouvez rechercher errno codes d'erreur .

33
Utku Zihnioglu

Sur les plates-formes Unix, vous pouvez au moins effectuer les opérations suivantes.

import socket, errno
try:
    # Do something...
except socket.error as e:
    if e.errno == errno.ECONNREFUSED:
        # Handle the exception...
    else:
        raise

Avant Python 2.6, utilisez e.args[ 0 ] au lieu de e.errno.

27
jchl

Je développe sur Windows et me suis retrouvé dans la même situation. Mais le message d'erreur contient toujours le numéro d'erreur. En utilisant ces informations, je viens de convertir l'exception en chaîne str(Exception), de convertir le code d'erreur que je veux vérifier en chaîne str(socket.errno.ERRORX) et de vérifier si le code d'erreur figure dans l'exception.

Exemple pour une exception de réinitialisation de connexion:

except Exception as errorMessage:
    if str(socket.errno.ECONNRESET) in str(errorMessage):
        print("Connection reset")
        #etc...

Cela évite les solutions spécifiques à l'environnement local mais n'est toujours pas indépendant de la plate-forme, malheureusement.

0
Edward Severinsen