Bonjour à tous,
J'essaie d'utiliser des exceptions dans une application python/GTK afin
que l'utilisateur final n'ait que des messages d'erreur dans des
fenêtres de dialogue, et non pas dans la console qu'il n'aura d'ailleurs
pas ouverte. Pour télécharger un fichier sur le web depuis mon
programme GTK, j'utilise les modules urllib et httplib.
Ma méthode de téléchargement commence ainsi :
def get_film_list(self):
#Try to connect, there could be errors
try:
conn = httplib.HTTPConnection(self.mcdomaine)
except:
alert = SimpleGladeApp("nszmoviecov.glade", "dialog1")
alertxt = u"Problu00E8me de connexion sur www.moviecovers.com"
alert.label11.set_text(alertxt)
return
Mais voilà, quand la connexion est coupée, l'exception n'est pas
déclenchée et j'ai un message d'erreur dans la console :
Traceback (most recent call last):
File "./nszgtkfilms.py", line 172, in on_telecharger1_activate
self.mvcov1.get_film_list()
File "/home/nonsenz/python/nszgtkfilms/moviecovers.py", line 34, in get_film_list
conn.request("GET",self.mctxtpath)
Ok, connexion coupée donc pas de résolution DNS, mais pourquoi mon
exception ne fonctionne-t-elle pas ?
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Bonjour à tous,
J'essaie d'utiliser des exceptions dans une application python/GTK afin
que l'utilisateur final n'ait que des messages d'erreur dans des
fenêtres de dialogue, et non pas dans la console qu'il n'aura d'ailleurs
pas ouverte. Pour télécharger un fichier sur le web depuis mon
programme GTK, j'utilise les modules urllib et httplib.
Ma méthode de téléchargement commence ainsi :
def get_film_list(self):
#Try to connect, there could be errors
try:
conn = httplib.HTTPConnection(self.mcdomaine)
except:
alert = SimpleGladeApp("nszmoviecov.glade", "dialog1")
alertxt = u"Problu00E8me de connexion sur www.moviecovers.com"
alert.label11.set_text(alertxt)
return
Mais voilà, quand la connexion est coupée, l'exception n'est pas
déclenchée et j'ai un message d'erreur dans la console :
Traceback (most recent call last):
File "./nszgtkfilms.py", line 172, in on_telecharger1_activate
self.mvcov1.get_film_list()
File "/home/nonsenz/python/nszgtkfilms/moviecovers.py", line 34, in get_film_list
conn.request("GET",self.mctxtpath)
Ok, connexion coupée donc pas de résolution DNS, mais pourquoi mon
exception ne fonctionne-t-elle pas ?
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Bonjour à tous,
J'essaie d'utiliser des exceptions dans une application python/GTK afin
que l'utilisateur final n'ait que des messages d'erreur dans des
fenêtres de dialogue, et non pas dans la console qu'il n'aura d'ailleurs
pas ouverte. Pour télécharger un fichier sur le web depuis mon
programme GTK, j'utilise les modules urllib et httplib.
Ma méthode de téléchargement commence ainsi :
def get_film_list(self):
#Try to connect, there could be errors
try:
conn = httplib.HTTPConnection(self.mcdomaine)
except:
alert = SimpleGladeApp("nszmoviecov.glade", "dialog1")
alertxt = u"Problu00E8me de connexion sur www.moviecovers.com"
alert.label11.set_text(alertxt)
return
Mais voilà, quand la connexion est coupée, l'exception n'est pas
déclenchée et j'ai un message d'erreur dans la console :
Traceback (most recent call last):
File "./nszgtkfilms.py", line 172, in on_telecharger1_activate
self.mvcov1.get_film_list()
File "/home/nonsenz/python/nszgtkfilms/moviecovers.py", line 34, in get_film_list
conn.request("GET",self.mctxtpath)
Ok, connexion coupée donc pas de résolution DNS, mais pourquoi mon
exception ne fonctionne-t-elle pas ?
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait, après quand même quelques
heures à tourner tout ça dans ma tête et à faire des tests. Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post, et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin. Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur. Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta, mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait, après quand même quelques
heures à tourner tout ça dans ma tête et à faire des tests. Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post, et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin. Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur. Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta, mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait, après quand même quelques
heures à tourner tout ça dans ma tête et à faire des tests. Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post, et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin. Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur. Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta, mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait,
après quand même quelques
heures à tourner tout ça dans ma tête
et à faire des tests.
Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post,
et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin.
Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur.
Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta,
mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).
Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait,
après quand même quelques
heures à tourner tout ça dans ma tête
et à faire des tests.
Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post,
et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin.
Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur.
Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta,
mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Et elle "fonctionne" très bien (pb évoqués ci-dessus à part).Je fais sans doute une erreur grossière, mais je ne vois pas laquelle...
Celle de croire que placer l'appel au constructeur de
httplib.HTTPConnection dans un try/except aura un effet sur l'appel de
la méthode request sur l'objet connection....
L'interpréteur interactif Python est un très bon outil pour
explorer/prototyper. Les tests unitaires sont aussi un bon moyen de
vérifier que le code se comporte comme prévu, et de repérer la source du
problème le cas échéant...
---
Cette réponse me convient tout à fait,
après quand même quelques
heures à tourner tout ça dans ma tête
et à faire des tests.
Pour être
franc, dans un premier temps, j'ai cru que tu répondais à côté de la
question au début du post,
et je me demandais si j'aurais assez que la
fin de ma vie pour en comprendre la fin.
Et puis j'ai fini par comprendre
l'ensemble.
Je n'avais en effet pas catché l'exception car elle arrivait après la
construction.
Merci beaucoup en tous cas ! C'est un plaisir de côtoyer des gens qui
savent de quoi ils parlent.
Si vous avez des exemples de docs python qui parlent des exceptions, je
suis preneur.
Les infos que j'ai récupérées proviennent d'un tutorial
de Guido van Rossum, Fred L. Drake, Jr, editor traduit par Olivier Berger
et Henri Garreta,
mais je trouve quand même cette notion assez difficile
à maîtriser complètement...
Un principe que j'adopte souvent c'est de ne rien catcher au début,
et d'ajouter les catchs d'exception au fur et à mesure qu'elles se
produisent, mais je ne catche que celles là et surtout je gère l'exception.
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
sinon une erreur de syntaxe peut
complètement passée inaperçue et là tu peux chercher des heures...
Autre chose importante, quand tu crée tes propres classes, crée aussi
tes classes d'exception, avec une hierarchie exemple:
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Un principe que j'adopte souvent c'est de ne rien catcher au début,
et d'ajouter les catchs d'exception au fur et à mesure qu'elles se
produisent, mais je ne catche que celles là et surtout je gère l'exception.
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
sinon une erreur de syntaxe peut
complètement passée inaperçue et là tu peux chercher des heures...
Autre chose importante, quand tu crée tes propres classes, crée aussi
tes classes d'exception, avec une hierarchie exemple:
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Un principe que j'adopte souvent c'est de ne rien catcher au début,
et d'ajouter les catchs d'exception au fur et à mesure qu'elles se
produisent, mais je ne catche que celles là et surtout je gère l'exception.
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
sinon une erreur de syntaxe peut
complètement passée inaperçue et là tu peux chercher des heures...
Autre chose importante, quand tu crée tes propres classes, crée aussi
tes classes d'exception, avec une hierarchie exemple:
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
On Wed, 02 Nov 2005 03:09:55 +0100, Bruno Desthuilliers wrote:Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
Je viens de rencontrer ce dilemme:
Pour une création de fichier, je dois gérer deux exceptions. Soit le
fichier existe déjà, soit je n'ai pas les droits necessaires pour créer
dans le répertoire. Dans ce cas là, qui est quand même un cas relativement
répandu, mentionner l'exception est quand même avantageux... non?
On Wed, 02 Nov 2005 03:09:55 +0100, Bruno Desthuilliers wrote:
Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,
La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
Je viens de rencontrer ce dilemme:
Pour une création de fichier, je dois gérer deux exceptions. Soit le
fichier existe déjà, soit je n'ai pas les droits necessaires pour créer
dans le répertoire. Dans ce cas là, qui est quand même un cas relativement
répandu, mentionner l'exception est quand même avantageux... non?
On Wed, 02 Nov 2005 03:09:55 +0100, Bruno Desthuilliers wrote:Mais surtout ne jamais catcher une exception par 'except:', il faut
toujours y associer une classe,La plus spécifique possible... un 'except Exception:' ne vaut guère
mieux qu'un 'except:'
Je viens de rencontrer ce dilemme:
Pour une création de fichier, je dois gérer deux exceptions. Soit le
fichier existe déjà, soit je n'ai pas les droits necessaires pour créer
dans le répertoire. Dans ce cas là, qui est quand même un cas relativement
répandu, mentionner l'exception est quand même avantageux... non?
spécifier la classe 'Exception'
spécifier la classe 'Exception'
spécifier la classe 'Exception'
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'excepti on
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'e xception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Mes deux centimes...
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'excepti on
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'e xception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Mes deux centimes...
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'excepti on
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'e xception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Mes deux centimes...
[Snip]class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Pour un module que tu veux réutiliser dans une plus grosse
application, c'est préférable de typer et de hiérarchiser les
exceptions,
c'est d'ailleurs le cas de ce que l'on trouve dans les
bonnes librairies Python.
Pour une petite appli, je suis d'accord avec
toi, cela ne se justifie pas toujours...
[Snip]
class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Pour un module que tu veux réutiliser dans une plus grosse
application, c'est préférable de typer et de hiérarchiser les
exceptions,
c'est d'ailleurs le cas de ce que l'on trouve dans les
bonnes librairies Python.
Pour une petite appli, je suis d'accord avec
toi, cela ne se justifie pas toujours...
[Snip]class TaClasse:
def .... etc
class ExceptionTaClasse(Exception): # Classe générique de l'exception
pass
class OverflowTaClasse(ExceptionTaClasse): # Classe spécialisée d'exception
...
class MissingValueTaClasse(ExceptionTaClasse): # Classe spécialisée
d'exception
....
Oui, enfin, si ça a un sens. La multiplication des classes d'exception
n'aide pas forcément. En général, je commence par voir quelle classe
d'exception 'standard' pourrait convenir. Et si je dois en créer une
nouvelle, j'essaie aussi de dériver une sous-classe standard plutôt
qu'Exception.
Pour un module que tu veux réutiliser dans une plus grosse
application, c'est préférable de typer et de hiérarchiser les
exceptions,
c'est d'ailleurs le cas de ce que l'on trouve dans les
bonnes librairies Python.
Pour une petite appli, je suis d'accord avec
toi, cela ne se justifie pas toujours...