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 :

Comprendre "UndefinedVariableError: name 'date_deb' is not defined" [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Conseiller Technique Logiciel
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Conseiller Technique Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Par défaut Comprendre "UndefinedVariableError: name 'date_deb' is not defined"
    Bonsoir,

    Mon objectif est de pouvoir sélectionner une plage de données de date à date.

    Mon code permet d'ouvrir le classeur et permet la saisie des deux dates extrêmes de la plage souhaité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
    import pandas as pd
    from datetime import datetime
    import os
    os.chdir('/home/moi/Python_Workplace/Projet Planning/')
     
    planning = pd.read_excel('./P_test.xlsm', sheet_name="Planning", usecols= "A, B, E:I", na_filter = False)
    Date_D = input("Quelle est la date de début de la période :(format AAAA-mm-jj)")
    Date_F = input("Quelle est la date de fin de la période :(format AAAA-mm-jj)")
    date_deb = datetime.strptime(Date_D, "%Y-%m-%d")
    date_fin = datetime.strptime(Date_F, "%Y-%m-%d")
    pligne_deb = planning.query('Date == date_deb').index
    pligne_fin = planning.query('Date == date_fin').index
    ligne_deb = pligne_deb.item()
    ligne_fin = pligne_fin.item() + 5
    plage = planning.iloc[ligne_deb:ligne_fin]
    Je ne parviens pas à comprendre pourquoi date_deb n'est pas défini.

    Je n’exclus pas m'y prendre de manière incorrecte et suis prêt à découvrir comment mieux faire.

    Cordialement

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pligne_deb = planning.query('Date == @date_deb').index
    pligne_fin = planning.query('Date == @date_fin').index
    peut-être ...

  3. #3
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    date_deb ou date_fin non définie ?
    Selon ton titre, ce serait _fin, Selon ton texte, ce serait _deb ...
    Or, si date_deb passe et pas date_fin, c'est différent d'un plantage dès date_deb

  4. #4
    Membre averti
    Homme Profil pro
    Conseiller Technique Logiciel
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Conseiller Technique Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Par défaut
    Bonjour,

    En effet, ypcman, c'est bien la première qui ne passe pas, soit date_deb.
    Je vais modifier mon titre.

    J'ai testé ta solution, VinsS, et cela fonctionne beaucoup mieux.

    Je ne comprends pas pourquoi il faut passer l’information ainsi, pour autant.

    Cependant mon code n'est pas joli et je souhaite mettre en place des fonctions.

    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
    import pandas as pd
    from datetime import datetime
    import os
    os.chdir('/home/moi/Python_Workplace/Projet Planning/')
     
     
     
    def Lecture_du_planning():
        """ Module qui ouvre le classeur contenant le planning et sélectionne la
        page générale.
        """
        planning = pd.read_excel('./P_test.xlsm', sheet_name="Planning", usecols= "A, B, E:I", na_filter = False)
        return planning
     
    def Choix_periode():
        """ Module qui permet de définir la période à extraire pour le traitement
        par la saisie de la date de début et de la date de fin.
        """
        Date_D = input("Quelle est la date de début de la période :(format AAAA-mm-jj)")
        Date_F = input("Quelle est la date de fin de la période :(format AAAA-mm-jj)")
        date_deb = datetime.strptime(Date_D, "%Y-%m-%d")
        date_fin = datetime.strptime(Date_F, "%Y-%m-%d")
        return date_deb, date_fin
     
    def plage_retenue(date_deb, date_fin, planning):
        """ Module qui permet de définir la plage de donnée à exploiter, à partir
        des dates de début et de fin
        """
        pligne_deb = planning.query('Date == @date_deb').index
        pligne_fin = planning.query('Date == @date_fin').index
        ligne_deb = pligne_deb.item()
        ligne_fin = pligne_fin.item() + 5
        plage = planning.iloc[ligne_deb:ligne_fin]
        print(plage['Stéphane'].value_counts())
        return plage
     
     
    # Principal
    planning = Lecture_du_planning()
    Choix_periode()
    plage_retenue(date_deb, date_fin, planning)
    Et de nouveau ce message :
    NameError: name 'date_deb' is not defined
    .

    Pourquoi donc ?

    Cordialement.

  5. #5
    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,

    Citation Envoyé par X5-495 Voir le message
    Pourquoi donc ?
    Une variable est définie lorsqu'on lui assigne un objet... et les variables ont une portée.
    Celles qui sont définies dans une fonction n'existent que pendant l'exécution de cette fonction (pas pas avant pas après).
    Et pour échanger des informations/données avec une fonction, on a les paramètres d'appels (qui peuvent être modifiables) ou la récupération de ce qu'elles retournent.

    Tout çà vous le savez puisque vous l'avez "bien" appliqué à la première fonction... reste à apprendre à relire votre code pour comprendre la bourde que vous avez fait et la corriger.



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

  6. #6
    Membre averti
    Homme Profil pro
    Conseiller Technique Logiciel
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Conseiller Technique Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Par défaut
    Bonjour wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Une variable est définie lorsqu'on lui assigne un objet... et les variables ont une portée. Celles qui sont définies dans une fonction n'existent que pendant l'exécution de cette fonction (pas pas avant pas après). Et pour échanger des informations/données avec une fonction, on a les paramètres d'appels (qui peuvent être modifiables) ou la récupération de ce qu'elles retournent.
    Nous sommes bien d'accord.

    Citation Envoyé par wiztricks Voir le message
    Tout çà vous le savez puisque vous l'avez "bien" appliqué à la première fonction... reste à apprendre à relire votre code pour comprendre la bourde que vous avez fait et la corriger.
    Déjà j'ai fait une bourde, on avance un peu. Apprendre à relire mon code, j'essaye et c'est un peu pour cela que je demande de l'aide.

    Cette bourde doit être tellement énorme que je ne la vois pas.

    Mais je vais persévérer... et finir par trouver que je renvoyais un tuple et non deux variables.

    Reste à trouver la bonne correction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    # Principal
    planning = Lecture_du_planning()
    periode = Choix_periode()
    date_deb = periode[0]
    date_fin = periode[1]
    extraction = plage_retenue(date_deb, date_fin)
    Merci wiztricks

    Cordialement.

  7. #7
    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,

    Citation Envoyé par X5-495 Voir le message
    Apprendre à relire mon code, j'essaye et c'est un peu pour cela que je demande de l'aide.

    Cette bourde doit être tellement énorme que je ne la vois pas.
    Dans les tutos, vous avez explications et exercices corrigés.

    Après si vous voulez conduire sans permis, c'est votre choix... mais on est beaucoup plus fainéants que vous: on écrit des tutos pour vous permettre d'apprendre les bases... histoire de ne pas se prendre le chou à répéter les mêmes choses aux débutants.

    Et si vous êtes réfractaire à la case tuto... relisez le titre de la discussion "comprendre" si vous le voulez vraiment, faites le premier pas car on ne peut pas "comprendre" à votre place (juste vous rabâcher ce que vous n'avez pas voulu aller chercher dans les tutos).

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

  8. #8
    Membre averti
    Homme Profil pro
    Conseiller Technique Logiciel
    Inscrit en
    Juin 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Conseiller Technique Logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 32
    Par défaut
    Bonsoir,

    J'ai lu des tonnes de tutos ici et là et même ailleurs ; alors pour reprendre l'idée... même avec le permis de conduire, il est possible de faire des bourdes.
    Je ne vois d'ailleurs où j'ai pu laisser croire que j'étais réfractaire à ces lectures.

    Mon métier est de faire la même chose qu'ici : répondre aux sempiternelles questions de clients qui n'ont pas lu la documentation fournie ou qui l'ont mal comprise, parce que parfois peu claire, ou qui ont juste besoin d'être rassurés sur un point.

    Je répète donc très souvent moi aussi les mêmes réponses et cela ne me pose pas de problème.N'est-ce pas le lot de ceux qui veulent aider les autres ?

    Le retour que j'ai eu m'a justement bien aidé à reprendre mes lectures... et si j'ai demandé cette aide c'est que vraiment, je ne lisais pas mon code mais que je lisais celui que je pensais avoir écrit. Je n'arrivais pas à prendre le recul nécessaire pour cela.

    Cordialement

  9. #9
    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
    Citation Envoyé par X5-495 Voir le message
    Je répète donc très souvent moi aussi les mêmes réponses et cela ne me pose pas de problème. N'est-ce pas le lot de ceux qui veulent aider les autres ?
    C'est votre boulot, donc à priori on vous paie pour çà...

    Normalement dans un centre d'appels (professionnel) celui qui appelle a au moins reçu un minimum de formation pour qu'on daigne prendre son appel. Sinon celui qui prend l'appel va seriner ce qu'il trouve dans sa base de donnée en fonction des mots clefs qu'il a extrait de la discussion.


    Ici c'est pareil, vous avez des règles qui supposent que vous avez appris à programmer en ouvrant un tuto et que vous n'ouvrez une discussion qu'après avoir lu la FAQ et cherché un peu sur Internet.

    Si vous venez ici, c'est pas pour réaliser votre projet du jour mais pour essayer de devenir un meilleur programmeur.

    Vous aviez écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def Choix_periode():
        ...
        return date_deb, date_fin
    pas si mal... sauf qu'ensuite l'appel:
    jette à la poubelle le retour de la fonction.

    L'intention de départ est louable (une fonction qui retourne quelque chose) mais çà se termine en queue de boudin car vous n'en faites rien... et c'est cette incohérence entre l'intention et la réalisation qui dénote un manque d'attention (j'écris un truc pour voir et je râle si çà ne marche pas) ou un manque de compréhension (çà sert à quoi de déléguer une activité a une fonction si on se fout pas mal du résultat?).

    Puis vous avez un message qui devrait vous interpeller quelque part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NameError: name 'date_deb' is not defined
    car vous devriez l'avoir rencontré maintes fois en essayant de faire les exercices proposés dans les tutos.

    Normal, pratiquer vous familiarise avec les bourdes qu'on fait en essayant de coder. Même lorsqu'on pense savoir, on fait des erreurs: pas grave, on comprend le message et on relit le code pour voir quelle bêtise on a fait et la corriger...

    C'est juste le b.a.ba.

    Problème pourquoi découper si on se sait pas réassembler ensuite?

    Vous auriez pu vous contentez d'écrire:
    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 datetime import datetime
    import os
    os.chdir('/home/moi/Python_Workplace/Projet Planning/')
     
    planning = pd.read_excel('./P_test.xlsm', sheet_name="Planning", usecols= "A, B, E:I", na_filter = False)
     
    Date_D = input("Quelle est la date de début de la période :(format AAAA-mm-jj)")
    Date_F = input("Quelle est la date de fin de la période :(format AAAA-mm-jj)")
    date_deb = datetime.strptime(Date_D, "%Y-%m-%d")
    date_fin = datetime.strptime(Date_F, "%Y-%m-%d")
     
    pligne_deb = planning.query('Date == @date_deb').index
    pligne_fin = planning.query('Date == @date_fin').index
    ligne_deb = pligne_deb.item()
    ligne_fin = pligne_fin.item() + 5
    plage = planning.iloc[ligne_deb:ligne_fin]
     
    print(plage['Stéphane'].value_counts())
    çà fait le job avec le Python que vous connaissez/maîtrisez.

    Après si vous voulez jouer avec les fonctions ou des class, c'est pas interdit mais si vous ne voulez pas passer du temps dans la case tuto. (et que votre prose ne montre pas un minimum de compréhension de ce que vous avez écrit...) çà ne va pas le faire.

    note: votre code n'est pas l'exercice d'un tuto... donc quelque part vous voulez faire avant d'avoir compris comment faire (et vous voulez qu'on vous explique juste parce que vous êtes pressé d'obtenir le résultat au lieu d'apprendre à le construire!)

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

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

Discussions similaires

  1. NameError: global name 'thread' is not defined
    Par Balbuzard dans le forum Général Python
    Réponses: 6
    Dernier message: 15/07/2009, 06h52
  2. Réponses: 4
    Dernier message: 19/06/2009, 15h23
  3. NameError: name 'nbBug' is not defined
    Par titi_lion dans le forum Général Python
    Réponses: 1
    Dernier message: 15/05/2009, 12h32
  4. NameError: global name 'entr2' is not defined
    Par noquioz dans le forum Tkinter
    Réponses: 18
    Dernier message: 24/11/2008, 11h20
  5. NameError: name 'excel' is not defined
    Par billyrose dans le forum Général Python
    Réponses: 3
    Dernier message: 14/07/2008, 17h37

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