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

Django Python Discussion :

gestion de message d'erreur


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Par défaut gestion de message d'erreur
    bonjour

    j' ai une fonction qui lit des donnees dans ma base et me retourne la valeur max et min correspondant a un certain materiau et une proprieté specifique

    je voudrai lorsqu'aucune donnee n'est enregistreé pour le materiau XXX il y ait un message d'erreur en retour

    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
    19
    20
    21
    22
    23
    24
    25
    26
    def calcul(maref, maprop):
     
        data =  Essai_Temperature.objects.filter(name__name=maref, val_champ=maprop)
     
        val_min_base=[]
        val_max_base=[]
        val_T_base=[]
        vref = []
     
        for e in data:
     
            val_T_base.append(e.valT)
            val_min_base.append(e.val10)
            vref.append(e.val_ref)     
        l1=0
        l2=0
        l3=0
        sizeTT=0
     
        val_TT_base=[]
     
        sizedata = len(val_T_base)
     
        if sizedata==0:
            print 'passage 0'
            return HttpResponse('<h1>aucune donnee dans la base</h1>')
    .....

    je detecte bien que la taille de mon tableau est nulle mais je continue a executer le reste du code

    pour avoir en retour le message suivant

    need more than 1 value to unpack...

    est ce bien HttpResponse qu'il faut utiliser ?

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    où est le "raise" ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Par défaut gestion message erreur
    j'ai essayé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def calcul(maref, maprop):
        try:
            ......
     
            return valeur_T, valeur_min
     
        except:
            return HttpResponse("OK")
    et ca ne marche pas

    quelle est la logique d'utilisation de try ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    "return" doit terminer la fonction "calcul".
    Si ce n'est pas le cas, c'est que l'instruction "return" n'a pas été exécutée ou que ce qui "continue" est sans rapport avec la fin de la fonction "calcul".

    Sans montrer plus de code et/ou clarifier le sens donné à "çà continue", il sera difficile de comprendre ce qu'il se passe.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 202
    Par défaut gestion d'erreur
    bonjour

    en fait j'ai une premiere fonction qui appelle la fonction calcul

    celle ci lit dans la base les donnees enregistrees de temperature pour un materiau donné et renvoie la liste des temperatures, la valeur min, la valeur max

    voici la premiere fonction

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    def affich_graphe(request):
        try:
     
            val_nom = request.GET['materiau']
            valT1 = request.GET['propriete']            # propriete 1
     
     
            #lavaleur1 = request.GET['valeur1']
            interpol = request.GET['interpolation']
     
            print val_nom
            print valT1
     
     
     
            moy=[]
            moy1=[]
     
     
            if val_nom !='0':
                valeur_T, valeur_min, valeur_max, valeur_moy, nomfichier = calcul(val_nom, valT1)        
                moy = moyenne(valeur_min, valeur_max)
     
                print 'vt', valeur_T
     
     
     
     
            datas20= {'val_T':valeur_T, 'val_min': valeur_min, 'val_max': valeur_max,
                      'val_moy': valeur_moy, 
                      'inter':interpol}
     
     
                      #'lechoix1':lavaleur1, 'inter':interpol}
     
     
            data = simplejson.dumps(datas20)
     
            return HttpResponse(data, mimetype= 'application/json')
     
        except Exception, msg:
            print 'erreur affichage', msg
            raise
    lorsque le materiau est enregistre mais qu'il n'ya aucune donnee temperature enregistree la liste est vide et j'obtient le message

    erreur affichage need more than 1 value to unpack

    moi ce que je voudrai c'est que j'ouvre une nouvelle page et que j'affiche

    "aucune donnee enregistree"

    voila la fonction calcul (ecourtée)

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    def calcul(maref, maprop):
        try:
            data =  Essai_Temperature.objects.filter(name__name=maref, val_champ=maprop)
     
            val_min_base=[]
            val_max_base=[]
            val_T_base=[]
            vref = []
     
            for e in data:
                val_T_base.append(e.valT)
                val_min_base.append(e.val10)
                vref.append(e.val_ref)     
            l1=0
            l2=0
            l3=0
            vv=0
            sizeTT=0
     
            val_TT_base=[]
     
            sizedata = len(val_T_base)
     
     
        # determination du nb de series identiques
     
            if sizedata==0:
                print 'pass'
                raise(ValueError)
     
            else:
     
                while l2 <= sizedata-2:
                    if (l2==0):
                        val_TT_base.append(val_T_base[l2])
                    else:
                        if (val_T_base[l2+1]!=val_T_base[l2]):
                            val_TT_base.append(val_T_base[l2+1])
                    l2+=1
     
    ...........
     
    return valeur_T, valeur_min, valeur_max, valeur_moy, nomfichier
     
        except ValueError:
            print 'pass2'
            return HttpResponse('material/faq.html')
    lorsque la liste est vide (sizedata) je vais bien executer 'pass2'

    visiblement ce ne doit pas etre HttpResponse le bon moyen de proceder...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    affich_graphe(request) appelle calcul à la ligne 21:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                valeur_T, valeur_min, valeur_max, valeur_moy, nomfichier = calcul(val_nom, valT1)
    Si calcul retourne autre chose qu'un tuple à 5 éléments, normal que çà râle avec "need more than 1 value to unpack" (modulo que ce message d'erreur se rapporte bien à cette ligne).

    Après c'est une question d'interface, soit l'appelant teste la longueur du tuple retourné par calcul, soit calcul remonte une exception: charge à l'appelant (affich_graphe) de tester le retour ou d'encapsuler l'appel dans un try...except et de retourner le réponse HTTP qui va bien.

    A vous de voir.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/11/2007, 19h15
  2. Réponses: 2
    Dernier message: 12/10/2006, 23h36
  3. [GUI] Gestion des messages d'erreurs
    Par agent007se dans le forum C++
    Réponses: 11
    Dernier message: 28/07/2006, 20h52
  4. gestion des messages d'erreurs
    Par keibenoit dans le forum Access
    Réponses: 2
    Dernier message: 31/05/2006, 14h49
  5. gestion photo - message d'erreur
    Par xboulney dans le forum Access
    Réponses: 2
    Dernier message: 16/03/2006, 12h45

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