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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 740
    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 740
    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 740
    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 740
    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

+ 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