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 :

Python 3.8, problème avec un script


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    Médecin
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut Python 3.8, problème avec un script
    Bonjour à tous,

    J'ai un soucis avec un script python mixant python3.8 et html, le tout tournant sous un serveur apache local (xampp). J'ai d'autre page python/html qui tourne sur mon pc sans problème, donc je ne pense pas que mon problème vienne de la ...

    Je vous met les parties des scripts posant problème :
    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
     
    #!C:\Users\...\AppData\Local\Programs\Python\Python38-32\python.exe
    print('content-type: text/html; charset-utf-8\n\n')
    html=""" <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Suivi cath&eacuteter</title>
    <link rel="stylesheet" href="../css/css_lien.css" />
    </head>
    <body>
    <center>
    <h2 class="suivi"> Suivi cath&eacuteter </h2>
    """
    print(html)
    import cgi
    import cgitb
    from id import id_suivi
     
    form = cgi.FieldStorage()
    try:
    	print(form.getvalue('patient')) 
    	if form.getvalue('patient') == None: #la variable existe mais elle est vide
    		print('la variable patient est vide')
    		id_suivi() #du coup on affiche le formulaire de sélection
    	else:
    		print('la variable patient vaut : {}'.format(form.getvalue('patient'))) #on affiche la variable form.getvalue('patient')
    except NameError: #la variable form.getvalue('patient') n'existe pas
    	id_suivi()
     
    html="""
    <br /><br />
    <a href ='../Accueil_BDD_CATHEVASC.py'> Retour au menu</a>
    </body>
    </html>
    """
    print(html)
    et cela nécessite un autre fichier appelé id dont le code est :
    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
     
    #!C:\Users\...\AppData\Local\Programs\Python\Python38-32\python.exe
    # -*- coding: utf-8 -*-
    def id_suivi():
    	import pandas as pd
    	form = cgi.FieldStorage()
    	df=pd.read_csv('../result/init.csv', sep=';')
    	nom=df['id']
    	print('<FORM action="suiviKT.py" method="post">')
    	print('<SELECT id="patient" name="patient"><option value="0">Choisir un patient</option>')
    	for p in enumerate(nom):
    		ligne=df.loc[df['id']==p[1],:]
    		print('<option value="{}"> {}, {}, {}, {}</option>'. format(ligne['id'].mode()[0], p[1], ligne['prenom'].mode()[0], ligne['typeKT'].mode()[0], ligne['numKT'].mode()[0])) 
    	print('</SELECT>')
    	print('<button type="submit">Choisir</button>')
    Comme on voit ce code id va chercher les données dans un fichier csv

    Les codes sont volontairement séparés car j'utilise le 'id_suivi()' dans d'autre fichier.

    Ce que je veux faire : afficher 'id_suivi' si la variable form.getvalue('patient') n'existe pas ou si celle-ci est vide
    Mais ce que j’obtiens avec le code c'est "None la variable patient est vide " mais après il y a une erreur : ca n'affiche pas le formulaire 'id_suivi()'

    J'ai également essayé de faire un del form.getvalue('patient') à la fin de mon try mais ca plante ...

    Je pense que l'erreur ne doit pas être très compliqué.

    Merci beaucoup pour votre aide !

    PS : Je débute en python donc il est fort probable qu'il y ait un moyen de faire plus simple sur mon code Je suis preneur de toute les remarques

  2. #2
    Membre régulier
    Homme Profil pro
    Médecin
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 8
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Par défaut
    J'ai trouvé la solution ...
    J'ai enlevé form = cgi.FieldStorage() dans id_suivi() et ca fonctionne
    mais du coup je ne comprend pas pourquoi ca marche sans et ca plante avec ... si quelqu'un peut m'éclairer...

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par yourth Voir le message
    mais du coup je ne comprend pas pourquoi ca marche sans et ca plante avec ... si quelqu'un peut m'éclairer...
    Souci de variable globale. Quand tu écris form = cgi.FieldStorage() en ligne 20, tu définis une variable globale utilisable de partout donc y compris dans la fonction id_suivi(). Mais si tu initialises une variable de même nom dans la fonction, tu crées alors une variable locale à la fonction qui masque la globale.
    Ensuite toutes tes modifs se font dans la variable locale puis quand tu quittes la fonction, ton code recommence à utiliser la globale dans laquelle les modifs qu'il attend n'ont pas eu lieu => plantage.
    Exemple: ce que tu avais fait au début
    Code python : 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
    >>> tab=[]
    >>> def f(n):
    ...     tab=[]
    ...     tab.extend(range(n))
    ...     print(tab)
    ... 
    >>> 
    >>> tab
    []
    >>> f(5)
    [0, 1, 2, 3, 4]
    >>> tab
    []
    >>> f(5)
    [0, 1, 2, 3, 4]
    >>> tab
    []
    >>>

    Ce que tu as fait ensuite
    Code python : 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
    >>> tab=[]
    >>> def f(n):
    ...     tab.extend(range(n))
    ...     print(tab)
    ... 
    >>> 
    >>> tab
    []
    >>> f(5)
    [0, 1, 2, 3, 4]
    >>> tab
    [0, 1, 2, 3, 4]
    >>> f(5)
    [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
    >>> tab
    [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
    >>>

    C'est une des raisons qui font qu'utiliser des globales c'est la super fausse bonne idée d'un développement.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. (Batch et VBS) Petit probléme avec un script batch VBS
    Par Edoxituz dans le forum Windows
    Réponses: 11
    Dernier message: 27/02/2006, 17h21
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26
  3. [Configuration] Problème avec un script de login utilisant une session
    Par HNT dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 27/09/2005, 19h56
  4. Problème avec un script d'ouverture de pop-up
    Par HNT dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/08/2005, 16h37
  5. problème avec un script de generation de nom de login
    Par black_code dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2005, 13h51

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