Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

"récupération" d'erreurs avec gadfly

3 réponses
Avatar
philippe
bonjour
je cherche comment on peut récupérer une erreur avec gadfly
le cas précis c :
reconnexion sur une base gadfly déjà existante, si la base a été
déplacée, ou si il y a une erreur sur le nom de la base donné dans
l'instruction, ou sur le répertoire
gadfly.gadfly("mesdata","répertoire de la base mesdata")
on reçoit dans la figure une vieille volée d'injures !
alors faire fonctionner les exceptions la dessus ou comment tester
auparavant la validité du nom de la base et du nom du répertoire ?
voilà
merci d'avance
philippe

3 réponses

Avatar
bruno modulix
philippe wrote:
bonjour
je cherche comment on peut récupérer une erreur avec gadfly
le cas précis c :
reconnexion sur une base gadfly déjà existante, si la base a été
déplacée, ou si il y a une erreur sur le nom de la base donné dans
l'instruction,


s/instruction/appel de fonction/

ou sur le répertoire
gadfly.gadfly("mesdata","répertoire de la base mesdata")
on reçoit dans la figure une vieille volée d'injures !


Et si tu postais le traceback ?

alors faire fonctionner les exceptions la dessus


Comme d'habitude:
try:
var = ouvre_connection(donnees_connection)
except LeTypeExceptionQuiVaBien, e:
gere_exception(e)
else:
travaille_avec(var)
var.close()

Dans ton cas:

try:
db = gadfly.gadfly("mesdata","répertoire/de/la/base/")
except IOError, e:
print >> sys.stderr, "could not open a connection to database mesdata"
sys.exit(1)
else:
do_something_with(db)

ou comment tester
auparavant la validité du nom de la base et du nom du répertoire ?


os.path.isdir('path/to/dir')
os.path.isfile('path/to/file')

voilà
merci d'avance


De rien, de rien...
Si tu prenais quelques minutes pour lire le joli manuel ?-)

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
philippe
In article <431ff628$0$9593$, bruno modulix
wrote:

philippe wrote:
bonjour
je cherche comment on peut récupérer une erreur avec gadfly
le cas précis c :
reconnexion sur une base gadfly déjà existante, si la base a été
déplacée, ou si il y a une erreur sur le nom de la base donné dans
l'instruction,


s/instruction/appel de fonction/
d'accord, ça assainit


ou sur le répertoire
gadfly.gadfly("mesdata","répertoire de la base mesdata")
on reçoit dans la figure une vieille volée d'injures !


Et si tu postais le traceback ?

alors faire fonctionner les exceptions la dessus


Comme d'habitude:
try:
var = ouvre_connection(donnees_connection)
except LeTypeExceptionQuiVaBien, e:
gere_exception(e)
else:
travaille_avec(var)
var.close()
oui le prob se situait pour moi au type d'exception


Dans ton cas:

try:
db = gadfly.gadfly("mesdata","répertoire/de/la/base/")
except IOError, e:
print >> sys.stderr, "could not open a connection to database mesdata"
sys.exit(1)
else:
do_something_with(db)
d'accord mais je croyais qu'il pouvait y avoir des exceptions

spécifiques générées par gadfly .....

ou comment tester
auparavant la validité du nom de la base et du nom du répertoire ?


os.path.isdir('path/to/dir')
os.path.isfile('path/to/file')
d'accord aussi, mais je me suis mal exprimé : je pensais que le module

gadfly avait une ou des méthodes pour faire ça sans aller voir à la
main si les fichiers existent...
Le problème c par exemple si je veux pouvoir ajouter des données à une
base gadfly la première fois il faut que crée la base la fois suivante
il faut que je teste si la base est là pour pouvoir ajouter des
données...

voilà
merci d'avance


De rien, de rien...
Si tu prenais quelques minutes pour lire le joli manuel ?-)
oui je suis justement en train de lire LE manuel de G Swinnen (très

didactique par ailleurs ) mais je n'ai rien vu par rapport au test de
la présence d'une base et j'ai aussi cherché google :
python gadfly method ( et autres requêtes du même genre) sans trouver
la réponse à ma question; et la doc qui vient avec le module gadfly
n'est pas très éclairante (enfin pour moi :-)

Merci de ta réponse
philippe


Avatar
bruno modulix
philippe wrote:
In article <431ff628$0$9593$, bruno modulix
wrote:


philippe wrote:




(snip)

gadfly.gadfly("mesdata","répertoire de la base mesdata")
on reçoit dans la figure une vieille volée d'injures !


Et si tu postais le traceback ?



J'insiste là-dessus : il a fallu que j'installe Gadfly pour voir ce que
tu obtenais, alors que tu avais l'info sous la main. Les traceback ne
sont pas des volées d'injures, ce sont des infos de débuggage.

alors faire fonctionner les exceptions la dessus


Comme d'habitude:
try:
var = ouvre_connection(donnees_connection)
except LeTypeExceptionQuiVaBien, e:
gere_exception(e)
else:
travaille_avec(var)
var.close()


oui le prob se situait pour moi au type d'exception


C'est dans le traceback !-)

Dans ton cas:

try:
db = gadfly.gadfly("mesdata","répertoire/de/la/base/")
except IOError, e:
print >> sys.stderr, "could not open a connection to database mesdata"
sys.exit(1)
else:
do_something_with(db)


d'accord mais je croyais qu'il pouvait y avoir des exceptions
spécifiques générées par gadfly .....


C'est fort possible pour d'autres cas, mais en l'occurrence, le
traceback disait "IOError", ce qui est assez logique dans la mesure où
il s'agit d'un fichier ou répertoire non trouvé... ce que le message du
traceback te signalait aussi, en toutes lettres :

IOError: [Errno 2] No such file or directory:
'/chemin/vers/nombase/nombase.gfd'


ou comment tester
auparavant la validité du nom de la base et du nom du répertoire ?


os.path.isdir('path/to/dir')
os.path.isfile('path/to/file')


d'accord aussi, mais je me suis mal exprimé : je pensais que le module
gadfly avait une ou des méthodes pour faire ça


Qu'est-ce qu'elle en ferait ? Si le fichier n'existe pas, ça lève une
IOError, ce qui est en l'occurrence l'information nécessaire et
suffisante.

sans aller voir à la
main si les fichiers existent...


Pourquoi ? Une base Gadfly, c'est des fichiers dans un répertoire, et la
stdlib fourni déjà tout le nécessaire pour gérer ça. Par ailleurs, le
paquetage ne peut pas deviner ce que tu va vouloir faire dans ce cas
précis, donc...

Le problème c par exemple si je veux pouvoir ajouter des données à une
base gadfly la première fois il faut que crée la base la fois suivante
il faut que je teste si la base est là pour pouvoir ajouter des
données...


Oui, c'est un problème classique (fichiers, entrées dans un
dictionnaire, etc). les deux solutions possibles sont
1/ tenter d'utiliser sans se poser de question, et récupérer si problème
2/ regarder d'abord si la ressource existe, sinon le créer

Tu retrouvera très souvent cette problématique. Si les probabilités sont
en faveur de l'existence de la ressource, choisis la première solution,
sinon la seconde. Ici, tu es bien évidemment dans le premier cas: en
général, on ne crée la base qu'une fois, et on l'utilise plusieurs fois !-)

Si tu prenais quelques minutes pour lire le joli manuel ?-)


oui je suis justement en train de lire LE manuel de G Swinnen (très
didactique par ailleurs ) mais je n'ai rien vu par rapport au test de
la présence d'une base


Bin voilà, t'a trouvé : si la base n'existe pas, tu a une IOError !-p

et j'ai aussi cherché google :
python gadfly method ( et autres requêtes du même genre) sans trouver
la réponse à ma question; et la doc qui vient avec le module gadfly
n'est pas très éclairante (enfin pour moi :-)


Elle est assez claire[1] sur le fait qu'une base Gadfly est un ensemble
de fichiers dans un répertoire, sur la façon de créer une base, et sur
la façon de se connecter à une base existante. Pour ce qui est de se
connecter (enfin, de tenter de...) à une base inexistante, tu a vu par
toi même ce que ça donnait.

[1] enfin, pour moi en tous cas... mais c'est peut-être aussi une
question de pratique, c'est sûr que si tu débutes en programmation, ce
n'est pas forcément si évident.


Bon, pour résumer:

dbname = 'mabase'
dbpath = "chemin/vers/mabase"

try:
db = gadfly.gadfly(dbname, dbpath)
except IOError, e:
if e.errno == 2: # no such file or directory:
print >> sys.stderr, "creation de %s dans %s" % (dbname, dbpath)
db = gadfly.gadfly()
db.startup('mabase', 'chemin/vers/mabase')
else:
raise

Merci de ta réponse
You're welcome.


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"