IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

asyncore.dispatcher : Handling d'error


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut asyncore.dispatcher : Handling d'error
    Bonjour,

    Voila, tout dabord je débute en python, j ai encore quelques difficultés pour saisir la philosophie de programmation.

    Donc, pour le taf, j'ai une classe héritant de asyncore.dispatcher.
    Afin de gérer les erreurs correctement, je vois qu il existe une methode
    handle_error():, qui selon la doc :
    handle_error()
    Called when an exception is raised and not otherwise handled. The default version prints a condensed traceback.
    J'en conclue que si une error dans la classe est raise sans être catché, la fonction va être appelée.

    Pour tester ca, je rajoute donc une exception dans mon send. Sauf que, non, l exception est bien monte, n est pas catché, mais a aucun moment mon handle_error n est appelée.
    Voici lecode ce ma classe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    from asyncore import dispatcher, file_dispatcher
    class Muxer(dispatcher):
    	def __init__(self, read_from, write_to):
    		self.read_from = file_dispatcher(read_from)
    		self.write_to = file_dispatcher(write_to)
    		self.patch_subdispatchers()
    [....]
    	def handle_error(self):
    		logger = logging.getLogger('mon.logger')
    	        logger.error('BOOM')
     
    	def recv(self, bufsize):
    		return self.read_from.recv(bufsize)
     
    	def send(self, data):
                    3/0        #<------- creation volontaire de lexception
    		return self.write_to.send(data)
    Alors est ce que je n ai strictement rien compris au fonctionnement de handle_error, et ca ne marche en fait pas du tout comme ca ? Ou alors j ai juste fait une petite erreur ?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Après avoir jeté un rapide coup d'oeil à asyncore.py, il me semble que handle_error est destiné à catcher les exceptions qui se produiraient dans les méthodes handle_{read,accept,connect,...}; donc si la méthode send n'est pas appelée depuis l'une de ces méthodes, handle_error ne sera pas exécuté.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Par défaut
    En fait j ai trouve le problème, c est bien cense marcher comme ca, mais le souci était que le send/recv ne sont pas vraiment réalisés dans cette class, mais dans une autre.
    Merci de votre aide ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Error handling: Object required
    Par astur2000 dans le forum VBScript
    Réponses: 4
    Dernier message: 01/07/2008, 13h57
  2. Error cognos "the dispatcher"
    Par Phil93 dans le forum Cognos
    Réponses: 0
    Dernier message: 06/12/2007, 15h15
  3. Réponses: 10
    Dernier message: 22/05/2007, 14h58
  4. dbExpress error: Invalid handle
    Par lassmust dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/11/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo